Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/179.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Moshi解析具有重复字段的嵌套对象_Android_Json_Retrofit_Moshi - Fatal编程技术网

Android Moshi解析具有重复字段的嵌套对象

Android Moshi解析具有重复字段的嵌套对象,android,json,retrofit,moshi,Android,Json,Retrofit,Moshi,我有以下JSON对象,它是一个包含许多对象的对象 { "people": { "john": { "age": "25", "location": "Japan", "favColor": "green" }, "Bill": { "age": "65", "location": "Canada", "favColor": "red" }, "Ann": { "age"

我有以下JSON对象,它是一个包含许多对象的对象

{
  "people": {
    "john": {
      "age": "25",
      "location": "Japan",
      "favColor": "green"
    },
    "Bill": {
      "age": "65",
      "location": "Canada",
      "favColor": "red"
    },
    "Ann": {
      "age": "42",
      "location": "USA",
      "favColor": "blue"
    },
    "Frank": {
      "age": "45",
      "location": "USA",
      "favColor": "violet"
    }
  }
}

我如何将其解析为一个列表?由于对象的数量可能会增长得相当大,我不想处理大量嵌套数据。

我想明白了。假设我们的JSON结构与我发布的完全相同,并且我们有一个
Person
类,带有
age
location
favColor
字段,我们需要创建一个moshi适配器,它将接收我们的JSON并返回一个列表。我们还将使用委托将每个对象解析为Person类。它看起来像这样:

class PersonListAdapter {

    @FromJson
    fun fromJson(reader: JsonReader, delegate: JsonAdapter<Person>): List<Person> {
        val list = ArrayList<Person>()

        reader.beginObject()
        reader.skipName()
        reader.beginObject()
        while (reader.hasNext()) {
            reader.skipName()
            delegate.fromJson(reader)?.let { list.add(it) }
        }
        reader.endObject()
        reader.endObject()
        return list
    }
}
类PersonListAdapter{
@FromJson
来自JSON的乐趣(reader:JsonReader,delegate:JsonAdapter):列表{
val list=ArrayList()
reader.beginObject()
reader.skipName()
reader.beginObject()
while(reader.hasNext()){
reader.skipName()
delegate.fromJson(reader)?.let{list.add(it)}
}
reader.endObject()
reader.endObject()
返回列表
}
}

我认为如果你能在你的名字中添加一个标题,比如“name”:“john”等,那么解析就容易多了。@goldwynda我无法控制响应。你试过解析它吗?你能提供代码吗?