安卓。如何解析 JsonArray 中的 JsonArrays
Posted
技术标签:
【中文标题】安卓。如何解析 JsonArray 中的 JsonArrays【英文标题】:Android. How to parse JsonArrays inside JsonArray 【发布时间】:2021-06-18 14:23:39 【问题描述】:我使用改造和 json。我需要像这样解析一个json:
"outer_array": [
"one" : [, ],
"two" : [],
"three" : [],
....
]
这是我的代码的一部分:
@SerializedName("outer_array") var data: List<List<Data>>
但是如何按键解析“outer_array”数组的每个元素。 “outer_array”内的数组可以从 0 到 n。也许我应该使用 TypeAdapter。但是我不知道如何将它应用于这种情况,请帮助我
【问题讨论】:
那个json有效吗? 【参考方案1】:您提供的 JSON 无效。您可以在JSONLint 上查看。我猜它应该是一个数组(没有"one" :
)或一个对象(outer_array前面的[
应该是)在第一种情况下你的代码很好,在第二种情况下你可以使用地图(比如HashMap),如果你需要将该映射转换为数组,你可以使用类似这样的东西
data class MyClass(
@SerializedName("outer_array") var data: HashMap<String, List<Data>>
)
val dataAsArray get() = data.map it.value
但是,如果您必须解析这些无效数据(例如,您不能要求提供者/后端解决此问题),即使 TypeAdapter 也无济于事,因为 JSON 无效并且您将面临异常,您可以使用正则表达式用
替换无效的
[
]
(但这太愚蠢了,尝试说服后端开发人员修复json:D)
【讨论】:
【参考方案2】:我建议您使用 Gson,这是一项将 JSON 字符串解析为对象的 Google 服务,反之亦然。只需将“implementation 'com.google.code.gson:gson:2.8.6'”添加到您 android 项目中应用的 Gradle 文件的依赖项中即可。
你可以使用两种方法:toJson(Object obj) 和 fromJson(string json, Class) 如果您有一个名为“MyObject”的类,则必须将其作为“fromJson”的第二个参数:MyObject.class,如果是数组,则为 MyObject[].class。
GitHub:https://github.com/google/gson
【讨论】:
以上是关于安卓。如何解析 JsonArray 中的 JsonArrays的主要内容,如果未能解决你的问题,请参考以下文章