Как парсить огромный JSON?
Имеется огромный (22к строк) JSON с продуктами, полученный из API через OkHttpClient. Его нужно распарсить для получения выборки вида: Хлеб ржаной | 20шт | 245гр | упаковано 07.20 | и еще что-нибудь (| - это для удобства чтения, в выборке его не будет)
Беда в том, что в JSON-е прилетает еще горища ненужной инфы и она не сгруппирована по порядку. Показать нормальный фрагмент не выйдет т.к. редактор вываливает все в строку, поэтому придется скрины крепить. Если совсем не понятно, прилеплю кусок из самогО JSON-а.
Очень похожая тема вот, но с маленьким массивом да, понятно, а с моей адской структурой, как по мне, не применимо.
Подскажите, как это чудо можно разобрать и получить желаемое? Спасибо!
Ответы (1 шт):
Вам нужен потоковый парсер Json (а ля SAX для XML). Самый простой входит в состав J2EE JsonParser, работает примерно так (в варианте тупого одноуровневого json потока):
final JsonParser parser = Json.createParser(new FileReader("myfile.json"));
String key = null;
String value = null;
while (parser.hasNext()) {
final Event event = parser.next();
switch (event) {
case KEY_NAME:
key = parser.getString();
System.out.println(key);
break;
case VALUE_STRING:
String string = parser.getString();
System.out.println(string);
break;
case VALUE_NUMBER:
BigDecimal number = parser.getBigDecimal();
System.out.println(number);
break;
case VALUE_TRUE:
System.out.println(true);
break;
case VALUE_FALSE:
System.out.println(false);
break;
}
}
parser.close();
}
Если ваш json имеет уровни вложенности придется слегка попотеть и запоминать статусы вложенности в ветках, типа if(key.equals("blah-blah")) - ну в общем это дело техники, если когда-либо писали SAX парсер для XML - это должно быть знакомо.
Отдельно скачать либу можно здесь (без J2EE)




