Frage Wie kann JSON mit Node.js analysiert werden?


Wie soll ich JSON mit Node.js analysieren? Gibt es ein Modul, das JSON sicher validieren und parsen kann?


852
2018-04-20 07:10


Ursprung


Antworten:


Du kannst es einfach benutzen JSON.parse.

node.js ist aufgebaut V8, die das globale Objekt bereitstellt JSON[Dokumente]. Die Definition der JSON Objekt ist Teil der ECMAScript 5-Spezifikation.

Hinweis - JSON.parse kann den aktuellen Thread binden, da es eine synchrone Methode ist. Wenn Sie also große JSON-Objekte analysieren möchten, verwenden Sie einen Streaming-JSON-Parser.


990
2018-04-20 07:13



Sie können benötigen .json-Dateien.

var parsedJSON = require('./file-name');

Zum Beispiel, wenn Sie eine haben config.json Datei im selben Verzeichnis wie Ihre Quellcodedatei, die Sie verwenden würden:

var config = require('./config.json');

oder (Dateierweiterung kann entfallen):

var config = require('./config');

beachten Sie, dass require ist synchron und liest nur die Datei Einmal, nachfolgende Aufrufe geben das Ergebnis aus dem Cache zurück

Beachten Sie auch, dass Sie dies nur für lokale Dateien unter Ihrer absoluten Kontrolle verwenden sollten, da es möglicherweise Code innerhalb der Datei ausführt.


621
2018-03-21 12:46



Sie können verwenden JSON.parse().

Sie sollten in der Lage sein, die JSON Objekt auf jedem ECMAScript 5 kompatible JavaScript-Implementierung. Und V8, auf dem Node.js gebaut wird, ist einer von ihnen.


Eine Zeichenfolge mit JSON-Daten analysieren

var str = '{ "name": "John Doe", "age": 42 }';
var obj = JSON.parse(str);

Parsen einer Datei mit JSON-Daten

Sie müssen einige Dateioperationen mit durchführen fs Modul.

Asynchrone Version

var fs = require('fs');

fs.readFile('/path/to/file.json', 'utf8', function (err, data) {
    if (err) throw err; // we'll not consider error handling for now
    var obj = JSON.parse(data);
});

Synchrone Version

var fs = require('fs');
var json = JSON.parse(fs.readFileSync('/path/to/file.json', 'utf8'));

Du willst es benutzen require? Denk nochmal!

Sie können manchmal verwenden require:

var obj = require('path/to/file.json');

Aber ich empfehle das nicht aus mehreren Gründen:

Hinweis: Wenn Sie eine JSON-Datei zum Speichern sensibler Informationen (z. B. Kennwörter) verwenden, ist dies die falsche Vorgehensweise. Sehen Sie, wie Heroku es macht: https://devcenter.heroku.com/articles/config-vars#setting-up-config-vars-for-a-deployed-application. Finden Sie heraus, wie Ihre Plattform das tut und verwendet process.env die Konfigurationsvariablen aus dem Code abrufen.

  1. require ist synchron. Wenn Sie eine sehr große JSON-Datei haben, wird Ihre Ereignisschleife erstickt. Sie müssen wirklich verwenden JSON.parse mit fs.readFile.
  2. require liest die Datei nur einmal. Nachfolgende Aufrufe an require für die gleiche Datei wird eine zwischengespeicherte Kopie zurückgeben. Keine gute Idee, wenn du einen lesen willst .json Datei, die kontinuierlich aktualisiert wird. Du könntest benutzen ein Hack. Aber an diesem Punkt ist es einfacher zu verwenden fs.
  3. Wenn Ihre Datei nicht über a verfügt .json Erweiterung, require behandelt den Inhalt der Datei nicht als JSON.

Ernst! Benutzen JSON.parse.


jsonfile Modul

Wenn Sie eine große Anzahl von lesen .json Dateien (und wenn Sie extrem faul sind), wird es immer lästig, den Code zu schreiben. Sie können einige Zeichen speichern, indem Sie die Taste drücken jsonfile Modul.

var jf = require('jsonfile');

Asynchrone Version

jf.readFile('/path/to/file.json', function(err, obj) {
  // obj contains JSON data
});

Synchrone Version

var obj = jf.readFileSync('/path/to/file.json');

JSON aus Streams analysieren

Wenn der JSON-Inhalt über das Netzwerk gestreamt wird, müssen Sie einen Streaming-JSON-Parser verwenden. Andernfalls bindet es den Prozessor und erstickt Ihre Ereignisschleife, bis der JSON-Inhalt vollständig gestreamt wurde.

Es gibt viele Pakete in NPM verfügbar dafür. Wählen Sie, was für Sie am besten ist.


Fehlerbehandlung / Sicherheit

Wenn Sie sich nicht sicher sind, ob das, was passiert ist JSON.parse() ist gültiger JSON, stellen Sie sicher, dass Sie den Anruf beilegen JSON.parse() in einem try/catch Block. Ein vom Benutzer bereitgestellter JSON-String könnte Ihre Anwendung zum Absturz bringen und sogar zu Sicherheitslücken führen. Stellen Sie sicher, dass die Fehlerbehandlung durchgeführt wird, wenn Sie extern bereitgestellten JSON analysieren.


279
2017-09-07 13:35



benutze die JSON-Objekt:

JSON.parse(str);

78
2018-04-20 07:13



Ein weiteres Beispiel für JSON.parse:

var fs = require('fs');
var file = __dirname + '/config.json';

fs.readFile(file, 'utf8', function (err, data) {
  if (err) {
    console.log('Error: ' + err);
    return;
  }

  data = JSON.parse(data);

  console.dir(data);
});

33
2017-07-24 09:15



Ich möchte erwähnen, dass es Alternativen zum globalen JSON-Objekt gibt. JSON.parse und JSON.stringify sind beide synchron. Wenn Sie also mit großen Objekten arbeiten möchten, sollten Sie einige der asynchronen JSON-Module auschecken.

Guck mal: https://github.com/joyent/node/wiki/Modules#wiki-parsers-json


32
2017-08-27 07:45



Umfassen die node-fs Bibliothek.

var fs = require("fs");
var file = JSON.parse(fs.readFileSync("./PATH/data.json", "utf8"));

Weitere Informationen zur Bibliothek 'fs' finden Sie in der Dokumentation unter http://nodejs.org/api/fs.html


28
2018-04-03 11:15