Использование GSON для анализа массива JSON
У меня есть файл JSON, как это:
[
{
"number": "3",
"title": "hello_world",
}, {
"number": "2",
"title": "hello_world",
}
]
До того, когда файлы имели корневой элемент, я использовал бы:
Wrapper w = gson.fromJson(JSONSTRING, Wrapper.class);
код, но я не могу думать, как кодировать класс Wrapper
поскольку корневой элемент является массивом.
Я пытался с помощью:
Wrapper[] wrapper = gson.fromJson(jsonLine, Wrapper[].class);
с:
public class Wrapper{
String number;
String title;
}
Но не повезло. Как еще я могу прочитать это, используя этот метод?
PS Я получил это для работы с помощью:
JsonArray entries = (JsonArray) new JsonParser().parse(jsonLine);
String title = ((JsonObject)entries.get(0)).get("title");
Но я бы предпочел знать, как это сделать (если это возможно) с обоими методами.
Ответы
Ответ 1
Проблема вызвана запятой в конце (в каждом случае каждого) объекта JSON, помещенного в массив:
{
"number": "...",
"title": ".." , //<- see that comma?
}
Если вы удалите их, ваши данные станут
[
{
"number": "3",
"title": "hello_world"
}, {
"number": "2",
"title": "hello_world"
}
]
и
Wrapper[] data = gson.fromJson(jElement, Wrapper[].class);
должно работать нормально.
Ответ 2
Gson gson = new Gson();
Wrapper[] arr = gson.fromJson(str, Wrapper[].class);
class Wrapper{
int number;
String title;
}
Кажется, все нормально. Но в вашей строке есть дополнительная ,
запятая.
[
{
"number" : "3",
"title" : "hello_world"
},
{
"number" : "2",
"title" : "hello_world"
}
]
Ответ 3
public static <T> List<T> toList(String json, Class<T> clazz) {
if (null == json) {
return null;
}
Gson gson = new Gson();
return gson.fromJson(json, new TypeToken<T>(){}.getType());
}
Пример вызова:
List<Specifications> objects = GsonUtils.toList(products, Specifications.class);