Wie sollte ich JSON mit Node.js parsen? Gibt es ein Modul, das JSON sicher validieren und parsen kann?
Antworten
Zu viele Anzeigen?Sie können einfach Folgendes verwenden JSON.parse
.
Die Definition des JSON
Objekt ist Teil der ECMAScript 5-Spezifikation . node.js basiert auf Google Chrome's V8 Engine, die dem ECMA-Standard entspricht. Daher verfügt node.js auch über ein globales Objekt JSON
[docs] .
Hinweis - JSON.parse
kann den aktuellen Thread blockieren, da es sich um eine synchrone Methode handelt. Wenn Sie also planen, große JSON-Objekte zu parsen, verwenden Sie einen Streaming-JSON-Parser.
Können Sie erfordern .json-Dateien.
var parsedJSON = require('./file-name');
Wenn Sie zum Beispiel eine config.json
in demselben Verzeichnis wie die Quellcodedatei, die Sie verwenden würden:
var config = require('./config.json');
oder (die Dateierweiterung kann weggelassen werden):
var config = require('./config');
beachten Sie, dass require
es synchron und liest nur die Datei einmal Die folgenden Aufrufe geben das Ergebnis aus dem Cache zurück
Beachten Sie außerdem, dass Sie dies nur für lokale Dateien unter Ihrer absoluten Kontrolle verwenden sollten, da es potenziell jeden Code innerhalb der Datei ausführt.
Sie können verwenden JSON.parse()
.
Sie sollten in der Lage sein, die JSON
Objekt auf jeder ECMAScript 5 kompatible JavaScript-Implementierung. Und V8 , auf dem Node.js aufbaut, ist eine davon.
Hinweis: Wenn Sie eine JSON-Datei zum Speichern sensibler Informationen (z. B. Passwörter) verwenden, ist das der falsche Weg. Sehen Sie sich an, wie Heroku das macht: https://devcenter.heroku.com/articles/config-vars#setting-up-config-vars-for-a-deployed-application . Finden Sie heraus, wie Ihre Plattform das macht, und nutzen Sie
process.env
um die Konfigurationsvariablen aus dem Code abzurufen.
Parsen einer Zeichenkette mit JSON-Daten
var str = '{ "name": "John Doe", "age": 42 }';
var obj = JSON.parse(str);
Parsen einer Datei mit JSON-Daten
Sie müssen einige Dateioperationen mit 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'));
Sie wollen die require
? Denken Sie noch einmal nach!
var obj = require('path/to/file.json');
Ich empfehle dies jedoch aus mehreren Gründen nicht:
require
ist synchron. Wenn Sie eine sehr große JSON-Datei haben, wird sie Ihre Ereignisschleife erdrosseln. Sie müssen wirklichJSON.parse
confs.readFile
.require
liest die Datei nur einmal . Nachfolgende Aufrufe vonrequire
für dieselbe Datei eine zwischengespeicherte Kopie zurück. Keine gute Idee, wenn Sie eine.json
Datei, die ständig aktualisiert wird. Sie könnten verwenden ein Hacken . Aber an diesem Punkt ist es einfacher, einfach diefs
.- Wenn Ihre Datei keine
.json
Erweiterung,require
wird der Inhalt der Datei nicht als JSON behandelt.
Ernsthaft! Verwenden Sie JSON.parse
.
load-json-file
Modul
Wenn Sie eine große Anzahl von Dokumenten lesen .json
Dateien, (und wenn Sie extrem faul sind), wird es lästig, jedes Mal Kesselsteincode zu schreiben. Sie können einige Zeichen einsparen, indem Sie die load-json-file
Modul.
const loadJsonFile = require('load-json-file');
Asynchrone Version
loadJsonFile('/path/to/file.json').then(json => {
// `json` contains the parsed object
});
Synchrone Version
let obj = loadJsonFile.sync('/path/to/file.json');
Parsen von JSON aus Streams
Wenn der JSON-Inhalt über das Netzwerk gestreamt wird, müssen Sie einen Streaming-JSON-Parser verwenden. Andernfalls wird Ihr Prozessor überlastet und Ihre Ereignisschleife erstickt, bis der JSON-Inhalt vollständig gestreamt ist.
Il y a eine Vielzahl von Paketen in NPM verfügbar für diese. Wählen Sie, was für Sie am besten ist.
Fehlerbehandlung/Sicherheit
Wenn Sie sich nicht sicher sind, ob das, was Sie an JSON.parse()
es gültiges JSON müssen Sie den Aufruf an JSON.parse()
innerhalb einer 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 eine Fehlerbehandlung durchgeführt wird, wenn Sie extern bereitgestelltes JSON parsen.
Verwenden Sie die JSON-Objekt :
JSON.parse(str);
- See previous answers
- Weitere Antworten anzeigen