9370 Stimmen

Können Kommentare in JSON verwendet werden?

Kann ich Kommentare innerhalb einer JSON-Datei verwenden? Wenn ja, wie?

14voto

Chris Punkte 1012

Um ein JSON-Element in Teile zu zerlegen, füge ich "Dummy-Kommentarzeilen" hinzu:

{

"#############################" : "Part1",

"data1"             : "value1",
"data2"             : "value2",

"#############################" : "Part2",

"data4"             : "value3",
"data3"             : "value4"

}

12voto

vitaly-t Punkte 22010

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

12voto

Joshua Richardson Punkte 1590

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

10voto

peak Punkte 86238

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

10voto

ifelse.codes Punkte 1929

Le site JSON-Spezifikation unterstützt keine Kommentare, // or /* */ Stil.

Aber einige JSON-Parsing-Bibliotheken und IDEs unterstützen sie.

Wie:

  1. JSON5
  2. Visual Studio-Code
  3. Kommentarjson

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