Я пытаюсь разобрать массив 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.




Примерно так должно работать:
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/
Вы можете проанализировать корневой объект как 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");
Это сработало, большое спасибо! Ответ @Marat Strelet тоже работает, но проще разобрать массив JSON в ArrayList.
@Noobuntu Если вы нашли оба ответа полезный, вы должны проголосовать за оба ответа. Вы можете только принимать один ответ, но вы можете проголосовать за много ответов.
Почему
Arrays.asListне пришел изjava.util.Arrays.asList?