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();

Antworten auf die Frage(1)

Ihre Antwort auf die Frage