Я хочу извлечь массив из Json Object, используя библиотеку GSON.
Я уже пытался создать класс и позволить библиотеке Gson делать всю работу, но в данном конкретном случае это не работает.
Класс для извлеченных данных
public class Images { private Image[] images; public class Image { private String url; public Image(String url) { this.url = url; } public String getUrl() { return url; } } public Images(Image[] images) { this.images = images; } public Image[] getImages() { return images; } }
Пример данных
... , "images": [ { "url": "https://a.allegroimg.com/original/030516/a867b9dd4021b15678fc03a3981b" }, { "url": "https://a.allegroimg.com/original/03da09/19740f7147ad929609cc2bcc499e" }, { "url": "https://a.allegroimg.com/original/03198b/c024c7e448cab876bb49ad055567" }, { "url": "https://a.allegroimg.com/original/039fee/64bae4c64dac89e5b5b4d001c2ca" } ], ...
Я получаю сообщение об ошибке: "com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: ожидаемый BEGIN_OBJECT, но был BEGIN_ARRAY в строке 1 столбца 283 пути $ .items.promoted [0] .images" Я прошу помощи в извлечении данных из объекта JSON.
Мне просто нужно было удалить класс 'Images' и сохранить 'urls' из Json в Image []
Вы можете использовать библиотеку DSM .Используя его, вы можете извлечь часть JSON при чтении данных JSON.
Прежде всего вы должны определить свое отображение в формате yaml.
Определение отображения:
result: type: array # expect result as array path: /images fields: url:
Используйте DSM для чтения данных.
DSM dsm=new DSMBuilder(new File("path/to/config.yaml")).create(); Object object=dsm.toObject(new File("path/to/data.json"); System.out.println(object);
Вот вывод:
[{url=https://a.allegroimg.com/original/030516/a867b9dd4021b15678fc03a3981b}, {url=https://a.allegroimg.com/original/03da09/19740f7147ad929609cc2bcc499e}, {url=https://a.allegroimg.com/original/03198b/c024c7e448cab876bb49ad055567}, {url=https://a.allegroimg.com/original/039fee/64bae4c64dac89e5b5b4d001c2ca}]
, если вы хотите получить все поля url в виде списка, который выможет зарядить ваше определение сопоставления следующим образом.
result: type: array path: /images/url
Вывод этого сопоставления:
[https://a.allegroimg.com/original/030516/a867b9dd4021b15678fc03a3981b, https://a.allegroimg.com/original/03da09/19740f7147ad929609cc2bcc499e, https://a.allegroimg.com/original/03198b/c024c7e448cab876bb49ad055567, https://a.allegroimg.com/original/039fee/64bae4c64dac89e5b5b4d001c2ca]
Ожидаемый BEGIN_OBJECT, но был BEGIN_ARRAY в строке 1 столбца 283 пути $ .items.promoted [0] .images
Проблема связана с классом оболочки Images. Из-за ошибки, я думаю, что ваш объект выглядит примерно так:
Images
class Promoted { private Images images; .. } class Images { private Image[] images; }
В вашей текущей форме json, который вы сможете проанализировать:
... , "images": { "images": [ { "url": "https://a.allegroimg.com/original/030516/a867b9dd4021b15678fc03a3981b" }, { "url": "https://a.allegroimg.com/original/03da09/19740f7147ad929609cc2bcc499e" }, { "url": "https://a.allegroimg.com/original/03198b/c024c7e448cab876bb49ad055567" }, { "url": "https://a.allegroimg.com/original/039fee/64bae4c64dac89e5b5b4d001c2ca" } ] } ...
Вместо этого вы можете непосредственно встроить массив Image[] в родительский объект (без класса-оболочки):
Image[]
class Promoted { private Image[] images; .. }