Jackson mehrere Objekte und riesige json-Dateien
Habe ich das Gefühl, dass die Antwort vielleicht ein Duplikat dieses: Jackson - Json zu POJO Mit Mehreren Einträgen aber ich denke, dass möglicherweise die Frage ist anders genug. Auch ich bin mit raw-Daten binden, anstatt vollständige Daten verbindlich.
So, wie der Fragesteller der Frage, ich habe mehrere Objekte in einer Datei und ich versuche zu drehen, Sie in die POJOs und Stopfen Sie in eine Datenbank-in meinem design, so kann ich auf die Daten zugreifen, schnell statt langsam.
Die Dateien hier sind in der Größenordnung von zig GB, mit bis zu Millionen von Objekten in jeder Datei. Egal, hier ist was ich habe, so weit:
ObjectMapper mapper = new ObjectMapper();
Map<String,Object> data = mapper.readValue(new File("foo.json"), Map.class);
System.out.println(data.get("bar"));
Und dies funktioniert hervorragend für den Druck das bar-element des ersten Objekts foo, aber ich brauche einen Weg, um zu Durchlaufen und jedes element in einer Weise, die nicht Essen, bis alle, mein Gedächtnis.
Dank.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwenden Sie diesen Beispielcode zu sehen, der die grundlegende Idee.
JsonParser
, da sonst die erste lese-und Puffer-block voller input; und diese gepufferten Inhalte werden fehlt, wenn getrennte Parser konstruiert werden.Object
oderJsonNode
(Baum-Modell) stattMap
; und auchObjectMapper.convertValue(map, OtherType.class
um Konvertierungen zu tatsächlichen Typ dynamisch.Müssen Sie nicht wählen zwischen Streaming (
JsonParser
) undObjectMapper
beides!Durchqueren Sie ein bisschen mit dem parser, aber dann rufen
JsonParser.readValueAs(MyType.class)
binden die einzelnen JSON-Objekt.Oder rufen
ObjectMapper
'sreadValue()
Methode übergeben JsonParser an den entsprechenden stellen. Oder verwenden SieObjectMapper.reader(Type.class).readValues()
und Durchlaufen so.Vorausgesetzt, Sie haben ein array Verpackung Ihrer Objekte, erstellen Sie einen JsonParser und rufen Sie dann
readValuesAs
mit dem entsprechenden Typ. Es gibt Sie wieder zurückIterator
mit allen Ihren Objekten liest die Datei, wie Sie verbrauchen die Objekte.