【问题标题】:Android. How to parse JsonArrays inside JsonArray安卓。如何解析 JsonArray 中的 JsonArrays
【发布时间】: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有效吗?

标签: android arrays json retrofit


【解决方案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

    【讨论】:

      猜你喜欢
      • 2016-05-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-03
      • 1970-01-01
      • 2011-01-01
      • 2013-05-28
      • 2015-11-18
      相关资源
      最近更新 更多