Разбор массива JSON БЕЗ класса-оболочки - PullRequest
0 голосов
/ 11 декабря 2018

Я пытаюсь проанализировать массив JSON в Java ArrayList с помощью Gson.

{
  "fathers": [
    {
      "name": "Donald",
      "age": 47,
      "children": [
        {
          "name": "Johnny",
          "age": 6
        },
        {
          "name": "Donna",
          "age": 15
        },
        {
          "name": "Alan",
          "age": 21
        }
      ]
    },
    {
      "name": "George",
      "age": 35,
      "children": [
        {
          "name": "Cynthia",
          "age": 10
        },
        {
          "name": "Stacey",
          "age": 5
        },
        {
          "name": "Dewey",
          "age": 2
        }
      ]
    }
  ]
}

Я пытаюсь проанализировать массив "отцов" в ArrayList ... Однако я могу 'сделать это напрямую, поскольку массив отцов обернут объектом JSON.Обычно я делал бы что-то вроде этого:

Type fathersListType = new TypeToken<ArrayList<Father>>(){}.getType();
fathersArrayList = gson.fromJson(fathersJson, fathersListType);

Но, поскольку массив отцов обернут объектом, я получаю эту ошибку:

Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 2 path $

Есть ли способ разборауказанный массив, без необходимости объявлять класс-оболочку, который содержит массив "отцов"?Например, игнорирование объекта-обертки или извлечение из него массива JSON.

Ответы [ 2 ]

0 голосов
/ 11 декабря 2018

Вы можете проанализировать корневой объект как Map:

Type rootType = new TypeToken<Map<String, List<Person>>>(){}.getType();
Map<String, List<Person>> root = gson.fromJson(fathersJson, rootType);
List<Person> fathersList = root.get("fathers");
0 голосов
/ 11 декабря 2018

Примерно так должно работать:

String data = "{...}"; // Your JSON
JsonArray array = new JsonParser().parse(data).getAsJsonObject().get("fathers").getAsJsonArray();
List<Father> fathers = Arrays.asList(new Gson().fromJson(array, Father[].class));

Arrays.asList исходит от https://commons.apache.org/

...