Was ist der schnellste Weg, um eine Untergruppe von JSON mit Jackson abzurufen?Java

Java-Forum
Anonymous
 Was ist der schnellste Weg, um eine Untergruppe von JSON mit Jackson abzurufen?

Post by Anonymous »

Nehmen wir an, ich bearbeite große JSON -Nutzlasten, aber ich kümmere mich nur um eine kleine Untergruppe ihrer Eigenschaften. In diesem Szenario wäre die Deserialisierung des Ganzen eine Zeit- und Erinnerungsverschwendung. Ich suche also nach einem effizienteren Ansatz, der nur mit den Attributen funktioniert, die ich tatsächlich benötige. Hier ist eine vereinfachte Version meiner Implementierung: < /p>

Code: Select all

// First approach: using objectMapper.readTree
public String retrieve(String jsonPayload, String field) {
return objectMapper.readTree(jsonPayload).get(field).asText();
}

// Second approach: using Jackson's low level streaming API, JsonParser
public String retrieve(String jsonPayload, String field) {
try (JsonParser parser = objectMapper.createParser(jsonPayload)){
while (parser.nextValue() != null) {
if (field.equals(parser.currentName())) {
return parser.getText();
}
}
}
}
< /code>
Meine anfängliche Hypothese war, dass der zweite Ansatz leistungsfähiger wäre, basierend auf den folgenden  Prämissen < /strong>: < /p>
[list]
[*] JsonParser muss nicht das Ganze zurückkehren und kann früh zurückkehren. Speicher < /li>
< /ul>
, aber dies zeigte nicht, dass es wahr ist. Ich habe einige Tests durchgeführt, um die Leistung beider Ansätze in Bezug auf verstrichene Zeit und Speicherverbrauch zu vergleichen. Ich habe einen JSON mit über ~ 450.000 Einträgen als Eingabe verwendet, was etwa 30 MB Daten entspricht. Dann führe ich mehrere Iterationen aus, die zufällige Eigenschaften von solchen JSONs abrufen. Auf den ersten Blick war das überraschend, aber ich denke, es gibt einige Möglichkeiten, es zu erklären. < /P>

readTree
müssen über interne Optimierungen verfügen, die es schneller machen als naiv mit JsonParser
[*] JsonParser verurteilt frühere Elemente nicht, was den Speicherverbrauch mit dem ReadTree -Leser immer noch laden lässt. Klassen. ReadTree tut nichts davon, daher bringt es eine gute Leistung
[/list]
Also scheint es, dass JsonParser nicht der richtige Weg ist, zumindest nicht so, wie ich es bisher ausprobiert habe. Was die Frage verlässt: Ist ReadTree () der schnellste Weg, JSON -Untergruppen mit Jackson zu extrahieren, oder gibt es bessere Optionen?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post