安卓。如何解析 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的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Json.simple 解析 Java 中的 JSONArray?

jsonarray 哪个性能好

如何解析json中map数据

安卓Json --JSONArray --Map 类型转换

JSON解析_exc1

如何在没有 JsonArray 的情况下解析 JsonObject?