【问题标题】:Android Kotlin + Klaxon - Parsing a JSON root arrayAndroid Kotlin + Klaxon - 解析 JSON 根数组
【发布时间】:2018-08-11 21:24:49
【问题描述】:

我有一个带有根数组的 JSON 资产:

[
  {
    "word": "word",
    "label": "label"
  },
  {
    "word": "word2",
    "label": "label2"
  }
]

我正在尝试使用 Klaxon 解析它。

到目前为止,我已经尝试了几种方法:

val wordDict = Klaxon().parse<List<DictWord>>( activity.assets.open("dict.json") )

val wordDict = Klaxon().parse<Array<DictWord>>( activity.assets.open("dict.json") )

val wordDict = Klaxon().parse<JsonArray<DictWord>>( activity.assets.open("dict.json") )

导致空列表或异常:

java.lang.ClassCastException: com.beust.klaxon.JsonArray 不能 转换为 com.beust.klaxon.JsonObject

我做错了什么?

【问题讨论】:

    标签: android arrays json kotlin klaxon


    【解决方案1】:

    在 Klaxon 的 GitHub 问题板上找到答案:https://github.com/cbeust/klaxon/issues/87

    数组解析是通过parseArray() 完成的,所以修复是:

    val wordDict = Klaxon().parseArray<DictWord>( activity.assets.open("dict.json") )
    

    值得一提的是,数组解析仅通过流 API 支持,对象映射 API 不支持。所以我们仅限于提供InputStreamString 作为参数。

    【讨论】:

    • 实际上它也适用于对象映射,它成功地将数组的每个元素映射到我为它定义的相应数据类的对象。
    • 似乎是一个新功能。您有任何文档支持您的新发现吗?
    • 我刚刚试过这样val WordDict = ArrayList(Klaxon().parseArray&lt;DictWord&gt;(jsonString)),我不得不将解析后的数据传递给ArrayList,因为parseArray返回一个List,而我需要一个ArrayList
    猜你喜欢
    • 1970-01-01
    • 2018-04-04
    • 1970-01-01
    • 1970-01-01
    • 2021-08-18
    • 1970-01-01
    • 1970-01-01
    • 2013-01-11
    • 2015-03-19
    相关资源
    最近更新 更多