1032 Stimmen

Wie parst man JSON mit Node.js?

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

4voto

Ravindra Galav Punkte 2531

Meine Lösung:

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);
});

3voto

mpen Punkte 253762

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.

2voto

l3x Punkte 29224

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

2voto

Shekar Mania Punkte 287

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")
}

2voto

Rahul Kamboj Punkte 449

Achten Sie immer darauf, JSON.parse in Fangversuch Block als Knoten immer einen unerwarteten Fehler, wenn Sie einige beschädigte Daten in Ihrem json haben, so verwenden Sie diesen Code anstelle von einfachen JSON.Parse

try{
     JSON.parse(data)
}
catch(e){
   throw new Error("data is corrupted")
  }

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X