Analysieren von JSON mit Jackson
ich benutzeJackson JSON von einem JSON zu analysiereninputStream
was wie folgt aussieht:
[
[ 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
]
Dies ist der ursprüngliche Feed-Link:http://uhunt.felix-halim.net/api/p
Ich möchte es analysieren und nur die ersten 4 Elemente von jedem Array behalten und andere 18 Elemente überspringen.
36
100
The 3n + 1 problem
56717
Codestruktur, die ich bisher ausprobiert habe:
while (jsonParser.nextToken() != JsonToken.END_ARRAY) {
jsonParser.nextToken(); // '['
while (jsonParser.nextToken() != JsonToken.END_ARRAY) {
// I tried many approaches here but not found appropriate one
}
}
Da dieser Feed ziemlich groß ist, muss ich dies effizient mit weniger Overhead und Speicher tun. Es gibt auch drei Modelle, um JSON zu verarbeiten:Streaming-API, Datenbindung undBaummodell. Welches ist für meinen Zweck geeignet?
Wie kann ich diesen Json effizient mit Jackson analysieren? Wie kann ich diese 18 Elemente überspringen und zum nächsten Array springen, um eine bessere Leistung zu erzielen?
Bearbeiten: (Lösung)
Jackson
undGSon
beide arbeiten fast im selben Mechanismus (inkrementeller Modus, da der Inhalt inkrementell gelesen und geschrieben wird), zu dem ich wechsleGSON
wie es eine Funktion hatskipValue()
(ziemlich passend mit Namen). Obwohl JacksonsnextToken()
wird funktionieren wieskipValue()
, GSON
scheint mir flexibler. Vielen Dank an @Kowser bro für seine Empfehlung. Ich habe GSON bereits kennengelernt, aber irgendwie ignoriert. Das ist mein Arbeitscode:
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();