Моши разбирает вложенные объекты с дубликатами полей - PullRequest
0 голосов
/ 23 октября 2018

У меня есть следующий объект 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 голосов
/ 23 октября 2018

Разобрался.Предполагая, что наша структура 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
    }
}
...