Ich stelle fest, dass eine Unmenge von Node-Modulen eine asynchrone API zum Analysieren von JSON bereitstellt , aber viele von ihnen scheinen die gesamte Datei oder den Stream in den Speicher zu lesen, eine riesige Zeichenfolge zu konstruieren und sie dann an JSON.parse()
zu übergeben. Dies ist, was die zweite Antwort auf "Wie JSON mit NodeJS zu parsen?" schlägt vor und ist genau das, was das Modul jsonfile.js"> tut
Das Konstruieren einer riesigen Saite ist genau das, was ich vermeiden möchte. Ich möchte eine API wie:
parseJsonFile(pathToJsonFile): Promise
wobei das zurückgegebene Promise
in das analysierte JSON-Objekt aufgelöst wird. Diese Implementierung sollte eine konstante Speichermenge verwenden. Ich bin nicht an irgendeiner Art von SAX-artigem Ding interessiert, das Ereignisse überträgt, während verschiedene Stücke geparst werden: nur das Endergebnis.
Ich denke jsonparse kann tun, was ich will (es enthält eindeutig Logik für die Analyse von JSON ohne JSON.parse()
), aber da ist kein einfaches Beispiel in README.md
und die eine Datei im Beispielverzeichnis scheint übermäßig kompliziert.
Ich habe ein Modul geschrieben, das dies tut: BFJ (Big-Friendly JSON). Es exportiert eine Reihe von Funktionen, die auf verschiedenen Abstraktionsebenen arbeiten, aber alle asynchron sind und im Kern streamen.
Auf der obersten Ebene befinden sich zwei Funktionen zum Lesen von und Schreiben in das Dateisystem, bfj.read
und bfj.write
. Sie geben jeweils ein Versprechen ab, also nennt ihr sie so:
Auch auf dieser Ebene gibt es eine Funktion zum Serialisieren von Daten in eine JSON-Zeichenfolge namens bfj.stringify
:
Darunter sind zwei weitere generische Funktionen zum Lesen von und Schreiben in Streams, bfj.parse
und bfj.streamify
. Diese dienen als Grundlage für die Funktionen auf höherer Ebene, aber Sie können sie auch direkt aufrufen:
Auf der untersten Ebene gibt es zwei Funktionen analog zu SAX-Parsern / Serializern, bfj.walk
und bfj.eventify
. Es ist unwahrscheinlich, dass Sie diese direkt aufrufen möchten, sie sind nur der Kern der Implementierung für die höheren Ebenen.
Es ist Open-Source- und MIT-lizenziert. Weitere Informationen finden Sie in der Readme .
Tags und Links javascript parsing json node.js