Android Kotlin + Klaxon - 解析 JSON 根数组
Posted
技术标签:
【中文标题】Android Kotlin + Klaxon - 解析 JSON 根数组【英文标题】:Android Kotlin + Klaxon - Parsing a JSON root array 【发布时间】: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
我做错了什么?
【问题讨论】:
【参考方案1】:在 Klaxon 的 GitHub 问题板上找到答案:https://github.com/cbeust/klaxon/issues/87
数组解析是通过parseArray()
完成的,所以修复是:
val wordDict = Klaxon().parseArray<DictWord>( activity.assets.open("dict.json") )
值得一提的是,数组解析仅通过流 API 支持,对象映射 API 不支持。所以我们仅限于提供InputStream
或String
作为参数。
【讨论】:
实际上它也适用于对象映射,它成功地将数组的每个元素映射到我为它定义的相应数据类的对象。 似乎是一个新功能。您有任何文档支持您的新发现吗? 我刚刚试过这样val WordDict = ArrayList(Klaxon().parseArray<DictWord>(jsonString))
,我不得不将解析后的数据传递给ArrayList
,因为parseArray
返回一个List
,而我需要一个ArrayList
。
以上是关于Android Kotlin + Klaxon - 解析 JSON 根数组的主要内容,如果未能解决你的问题,请参考以下文章
如何在 android studio 上使用 klaxon 从 thingspeak 解析 json 以获取字段值?