Wie sollte ich JSON mit Node.js parsen? Gibt es ein Modul, das JSON sicher validieren und parsen kann?
Antworten
Zu viele Anzeigen?Nur um die Sache so kompliziert wie möglich zu machen und so viele Pakete wie möglich zu schnüren...
const fs = require('fs');
const bluebird = require('bluebird');
const _ = require('lodash');
const readTextFile = _.partial(bluebird.promisify(fs.readFile), _, {encoding:'utf8',flag:'r'});
const readJsonFile = filename => readTextFile(filename).then(JSON.parse);
Das können Sie tun:
var dataPromise = readJsonFile("foo.json");
dataPromise.then(console.log);
Oder wenn Sie async/await verwenden:
let data = await readJsonFile("foo.json");
Der Vorteil gegenüber der bloßen Verwendung von readFileSync
ist, dass Ihr Node-Server andere Anfragen bearbeiten kann, während die Datei von der Festplatte gelesen wird.
Nutzen Sie die Funktion attempt von Lodash, um ein Fehlerobjekt zurückzugeben, das Sie mit der Funktion isError behandeln können.
// Returns an error object on failure
function parseJSON(jsonString) {
return _.attempt(JSON.parse.bind(null, jsonString));
}
// Example Usage
var goodJson = '{"id":123}';
var badJson = '{id:123}';
var goodResult = parseJSON(goodJson);
var badResult = parseJSON(badJson);
if (_.isError(goodResult)) {
console.log('goodResult: handle error');
} else {
console.log('goodResult: continue processing');
}
// > goodResult: continue processing
if (_.isError(badResult)) {
console.log('badResult: handle error');
} else {
console.log('badResult: continue processing');
}
// > badResult: handle error
Wie in den obigen Antworten erwähnt, können wir JSON.parse()
um die Zeichenketten in JSON zu parsen Achten Sie jedoch vor dem Parsen darauf, dass Sie die richtigen Daten parsen, da sonst Ihre gesamte Anwendung zusammenbrechen könnte
ist es sicher, es so zu verwenden
let parsedObj = {}
try {
parsedObj = JSON.parse(data);
} catch(e) {
console.log("Cannot parse because data is not is proper json format")
}