Разбор JSON с Джексоном
я используюДжексон разобрать JSON из JSONinputStream
который выглядит следующим образом:
[
[ 36,
100,
"The 3n + 1 problem",
56717,
0,
1000000000,
0,
6316,
0,
0,
88834,
0,
45930,
0,
46527,
5209,
200860,
3597,
149256,
3000,
1
],
[
........
],
[
........
],
.....// and almost 5000 arrays like above
]
Это оригинальная ссылка на фид:http://uhunt.felix-halim.net/api/p
Я хочу проанализировать его и сохранить только первые 4 элемента каждого массива и пропустить остальные 18 элементов.
36
100
The 3n + 1 problem
56717
Структура кода, которую я пробовал до сих пор:
while (jsonParser.nextToken() != JsonToken.END_ARRAY) {
jsonParser.nextToken(); // '['
while (jsonParser.nextToken() != JsonToken.END_ARRAY) {
// I tried many approaches here but not found appropriate one
}
}
Поскольку этот канал довольно большой, мне нужно делать это эффективно с меньшими затратами и памятью. Также есть три модели для преобразования JSON:Потоковое API,Привязка данных а такжеМодель дерева, Какой из них подходит для моей цели?
Как я могу эффективно проанализировать этот JSON с Джексоном? Как я могу пропустить эти 18 элементов и перейти к следующему массиву для лучшей производительности?
Изменить: (Решение)
Jackson
а такжеGSon
оба работают практически в одном и том же механизме (инкрементный режим, поскольку контент читается и записывается постепенно), я переключаюсь наGSON
как у него есть функцияskipValue()
(довольно уместно с именем). Хотя ДжексонаnextToken()
будет работать как,skipValue()
GSON
кажется более гибким для меня. Спасибо @Kowser bro за его рекомендацию, я узнал о GSON раньше, но почему-то проигнорировал его. Это мой рабочий код:
reader.beginArray();
while (reader.hasNext()) {
reader.beginArray();
int a = reader.nextInt();
int b = reader.nextInt();
String c = reader.nextString();
int d = reader.nextInt();
System.out.println(a + " " + b + " " + c + " " + d);
while (reader.hasNext())
reader.skipValue();
reader.endArray();
}
reader.endArray();
reader.close();