Analizando JSON con Jackson
estoy usandoJackson para analizar JSON de un jsoninputStream
que se parece a lo siguiente:
[
[ 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
]
Este es el enlace de alimentación original:http://uhunt.felix-halim.net/api/p
Quiero analizarlo y mantener solo los primeros 4 elementos de cada matriz y omitir otros 18 elementos.
36
100
The 3n + 1 problem
56717
Estructura de código que he intentado hasta ahora:
while (jsonParser.nextToken() != JsonToken.END_ARRAY) {
jsonParser.nextToken(); // '['
while (jsonParser.nextToken() != JsonToken.END_ARRAY) {
// I tried many approaches here but not found appropriate one
}
}
Como esta fuente es bastante grande, debo hacer esto de manera eficiente con menos gastos generales y memoria. También hay tres modelos para procesar JSON:API de streaming, El enlace de datos yModelo de arbol. ¿Cuál es apropiado para mi propósito?
¿Cómo puedo analizar este json eficientemente con Jackson? ¿Cómo puedo omitir esos 18 elementos y saltar a la siguiente matriz para un mejor rendimiento?
Edición: (Solución)
Jackson
yGSon
ambas funcionan casi en el mismo mecanismo (modo incremental, ya que el contenido se lee y escribe de manera incremental), estoy cambiando aGSON
ya que tiene una funciónskipValue()
(bastante apropiado con el nombre). Aunque JacksonnextToken()
funcionará comoskipValue()
, GSON
Me parece más flexible. Gracias a @Kowser bro por su recomendación, llegué a conocer acerca de GSON antes, pero de alguna manera lo ignoré. Este es mi código de trabajo:
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();