2016-06-20 8 views
2

ich mit einer Struktur wie diese eine JSON-Datei:Jackson: Stream JSON-Array über Datenbindung?

[ 
    obj1, 
    obj2, 
    ... 
    objN 
] 

Alle Teilobjekte sind völlig eigenständig, das heißt es gibt keine Querverweise zwischen ihnen. Das Problem ist, dass die Datei als Ganzes riesig ist (> 100k Einträge im Root-Array).

Gibt es eine Möglichkeit in Jackson, den Inhalt des Root-Arrays durch Datenbindung zu streamen, so dass das Root-Array nie vollständig im Hauptspeicher residiert? Ich möchte die niedrige JsonGenerator/JsonParser API vermeiden.

Antwort

2

Ja. Überprüfen Sie ObjectReader (erstellt mit verschiedenen Methoden in ObjectMapper, wie .readerFor(ElementType.class)), und dann seine readValues() Methode, die MappingIterator<ElementType> zurückgibt (für welchen Typ Sie verwenden). Diese Methode bindet nur jeweils ein Element.

Wenn sich die Werte im Array auf Root-Ebene befinden, sollte dies so funktionieren, wie es ist. Wenn sie irgendwo tiefer in der JSON-Struktur wären, müssten Sie zuerst JsonParser konstruieren und dann mit dem ersten Wert iterieren (mit nextToken()), aber danach könnten Sie noch MappingIterator für eine effiziente Einzelstückbindung erstellen.

+0

Danke, das ist genau der Hinweis, den ich brauchte, um loszulegen! – Alan47