Kann ich Kommentare innerhalb einer JSON-Datei verwenden? Wenn ja, wie?
Antworten
Zu viele Anzeigen?Sie können JSON mit Kommentaren verwenden, wenn Sie es als Textdatei laden und dann die Kommentare entfernen.
Sie können zum Beispiel Folgendes verwenden dekommentieren Bibliothek zu finden. Nachfolgend finden Sie ein vollständiges Beispiel.
JSON eingeben (Datei input.js):
/*
* multi-line comments
**/
{
"value": 123 // one-line comment
}
Test Anwendung:
var decomment = require('decomment');
var fs = require('fs');
fs.readFile('input.js', 'utf8', function (err, data) {
if (err) {
console.log(err);
} else {
var text = decomment(data); // removing comments
var json = JSON.parse(text); // parsing JSON
console.log(json);
}
});
Ausgabe:
{ value: 123 }
Siehe auch: gulp-decomment , grunt-decomment
Der Autor von JSON möchte, dass wir Kommentare in das JSON einfügen, sie aber vor dem Parsen herausnehmen (siehe Link bereitgestellt von Michael Burr). Wenn JSON Kommentare haben sollte, warum sollte man sie nicht standardisieren und den JSON-Parser die Arbeit machen lassen? Ich bin mit dieser Logik nicht einverstanden, aber das ist leider der Standard. Eine YAML-Lösung, wie sie von anderen vorgeschlagen wurde, ist gut, erfordert aber eine Bibliotheksabhängigkeit.
Wenn Sie Kommentare entfernen möchten, aber keine Bibliotheksabhängigkeit haben wollen, finden Sie hier eine zweizeilige Lösung, die für Kommentare im C++-Stil funktioniert, aber auch an andere angepasst werden kann:
var comments = new RegExp("//.*", 'mg');
data = JSON.parse(fs.readFileSync(sample_file, 'utf8').replace(comments, ''));
Beachten Sie, dass diese Lösung nur in Fällen verwendet werden kann, in denen Sie sicher sein können, dass die JSON-Daten nicht den Initiator des Kommentars enthalten, z. B. ('//').
Eine andere Möglichkeit, JSON zu parsen, Kommentare zu entfernen und keine zusätzliche Bibliothek zu verwenden, besteht darin, das JSON in einem JavaScript-Interpreter auszuwerten. Der Nachteil bei diesem Ansatz ist natürlich, dass Sie nur unverfälschte Daten auswerten möchten (keine nicht vertrauenswürdigen Benutzereingaben). Hier ist ein Beispiel für diesen Ansatz in Node.js - ein weiterer Vorbehalt, das folgende Beispiel liest die Daten nur einmal und wird dann zwischengespeichert:
data = require(fs.realpathSync(doctree_fp));
Als sagte der Erfinder von JSON :
JSON hat keine Kommentare. Ein JSON-Kodierer MUSS KEINE Kommentare ausgeben. Ein JSON-Decoder KANN Kommentare akzeptieren und ignorieren.
Der Nutzen jq enthält einen Decoder, der Kommentare im "#"-Stil zulässt. Damit ist jq eines von mehreren Tools, die in Verbindung mit JSON-with-comments-Dateien verwendet werden können, solange solche Dateien als "jq-Programme" und nicht als JSON-Dateien behandelt werden. Zum Beispiel:
$ jq -ncf <(echo $'[1, # one\n2 ] # two')
[1,2]
Noch wichtiger ist, dass jq sehr große JSON-Dateien mit Kommentaren als Programme verarbeiten kann; dies kann anhand einer bekannten JSON-Datei veranschaulicht werden:
$ ls -l JEOPARDY_QUESTIONS1.json
-rw-r--r-- 2 xyzzy staff 55554625 May 12 2016 JEOPARDY_QUESTIONS1.json
$ jq -nf JEOPARDY_QUESTIONS1.json | jq length
216930
Le site JSON-Spezifikation unterstützt keine Kommentare, // or /* */
Stil.
Aber einige JSON-Parsing-Bibliotheken und IDEs unterstützen sie.
Wie: