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

时间:2018-10-22 22:41:40

标签: android json retrofit moshi

我有以下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"
    }
  }
}

如何将其解析为列表?由于对象的数量可能会变得非常大,所以我不想处理大量的嵌套数据。

1 个答案:

答案 0 :(得分:0)

弄清楚了。假设我们的JSON结构与我发布的完全相同,并且我们有一个Person类,其中包含age locationfavColor字段,我们需要创建一个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
    }
}