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?

2voto

Timothy C. Quinn Punkte 2697

JSON.parse gewährleistet nicht die Sicherheit des zu analysierenden JSON-Strings. Sie sollten sich eine Bibliothek wie json-safe-parse oder eine ähnliche Bibliothek.

Von json-safe-parse npm Seite:

JSON.parse ist großartig, hat aber im Kontext von JavaScript einen schwerwiegenden Fehler: Es erlaubt Ihnen, geerbte Eigenschaften zu überschreiben. Dies kann zu einem Problem werden, wenn Sie JSON aus einer nicht vertrauenswürdigen Quelle (z. B. einem Benutzer) parsen und Funktionen aufrufen, von denen Sie erwarten würden, dass sie existieren.

2voto

Praveen Poonia Punkte 717

Utilice JSON.parse(str); . Mehr darüber lesen aquí .

Hier sind einige Beispiele:

var jsonStr = '{"result":true, "count":42}';

obj = JSON.parse(jsonStr);

console.log(obj.count);    // expected output: 42
console.log(obj.result);   // expected output: true

2voto

Mig82 Punkte 4136

Ich benutze fs-extra . Ich mag es sehr, denn obwohl es Rückrufe unterstützt, unterstützt es auch Versprechen . So kann ich meinen Code viel lesbarer schreiben:

const fs = require('fs-extra');
fs.readJson("path/to/foo.json").then(obj => {
    //Do dome stuff with obj
})
.catch(err => {
    console.error(err);
});

Außerdem verfügt es über viele nützliche Methoden, die nicht zum Standardumfang gehören fs Modul et Darüber hinaus überbrückt es auch die Methoden der nativen fs Modul und verspricht sie.

HINWEIS: Sie können weiterhin die nativen Node.js-Methoden verwenden. Sie sind promisifiziert und in fs-extra kopiert. Siehe Hinweise zu fs.read() & fs.write()

Es gibt also im Grunde nur Vorteile. Ich hoffe, andere finden das nützlich.

1voto

Nux Punkte 7922

Wenn Sie einige Kommentare in Ihr JSON einfügen und abschließende Kommas zulassen möchten, sollten Sie die folgende Implementierung verwenden:

var fs = require('fs');

var data = parseJsData('./message.json');

console.log('[INFO] data:', data);

function parseJsData(filename) {
    var json = fs.readFileSync(filename, 'utf8')
        .replace(/\s*\/\/.+/g, '')
        .replace(/,(\s*\})/g, '}')
    ;
    return JSON.parse(json);
}

Beachten Sie, dass es möglicherweise nicht gut funktioniert, wenn Sie etwas haben wie "abc": "foo // bar" in Ihrem JSON. Also YMMV.

1voto

Lae Kettavong Punkte 349

Wenn die JSON-Quelldatei ziemlich groß ist, sollten Sie den asynchronen Weg über den nativen async / await-Ansatz mit Node.js 8.0 wie folgt in Betracht ziehen

const fs = require('fs')

const fsReadFile = (fileName) => {
    fileName = `${__dirname}/${fileName}`
    return new Promise((resolve, reject) => {
        fs.readFile(fileName, 'utf8', (error, data) => {
            if (!error && data) {
                resolve(data)
            } else {
                reject(error);
            }
        });
    })
}

async function parseJSON(fileName) {
    try {
        return JSON.parse(await fsReadFile(fileName));
    } catch (err) {
        return { Error: `Something has gone wrong: ${err}` };
    }
}

parseJSON('veryBigFile.json')
    .then(res => console.log(res))
    .catch(err => console.log(err))

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