9370 Stimmen

Können Kommentare in JSON verwendet werden?

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

242voto

p3drosola Punkte 5690

HAFTUNGSAUSSCHLUSS: IHRE GARANTIE IST NICHTIG

Wie bereits erwähnt, macht sich dieser Hack die Implementierung der Spezifikation zunutze. Nicht alle JSON-Parser werden diese Art von JSON verstehen. Insbesondere Streaming-Parser werden abgewürgt.

Es ist eine interessante Kuriosität, aber Sie sollte es wirklich nicht für irgendetwas verwendet werden . Nachstehend finden Sie die Originalantwort.


Ich habe einen kleinen Hack gefunden, mit dem Sie Kommentare in eine JSON-Datei einfügen können, die das Parsing nicht beeinflussen oder die dargestellten Daten in irgendeiner Weise verändern.

Es scheint, dass Sie bei der Deklaration eines Objektliterales zwei Werte mit demselben Schlüssel angeben können, wobei der letzte Wert Vorrang hat. Ob Sie es glauben oder nicht, es stellt sich heraus, dass JSON-Parser genauso arbeiten. So können wir dies nutzen, um Kommentare in der JSON-Quelle zu erstellen, die in einer geparsten Objektdarstellung nicht vorhanden sind.

({a: 1, a: 2});
// => Object {a: 2}
Object.keys(JSON.parse('{"a": 1, "a": 2}')).length; 
// => 1

Wenn wir diese Technik anwenden, könnte Ihre kommentierte JSON-Datei wie folgt aussehen:

{
  "api_host" : "The hostname of your API server. You may also specify the port.",
  "api_host" : "hodorhodor.com",

  "retry_interval" : "The interval in seconds between retrying failed API calls",
  "retry_interval" : 10,

  "auth_token" : "The authentication token. It is available in your developer dashboard under 'Settings'",
  "auth_token" : "5ad0eb93697215bc0d48a7b69aa6fb8b",

  "favorite_numbers": "An array containing my all-time favorite numbers",
  "favorite_numbers": [19, 13, 53]
}

Der obige Code lautet gültiges JSON . Wenn Sie es analysieren, erhalten Sie ein Objekt wie dieses:

{
    "api_host": "hodorhodor.com",
    "retry_interval": 10,
    "auth_token": "5ad0eb93697215bc0d48a7b69aa6fb8b",
    "favorite_numbers": [19,13,53]
}

Das bedeutet, dass es keine Spuren der Kommentare gibt und dass sie keine seltsamen Nebenwirkungen haben.

Viel Spaß beim Hacken!

194voto

Erwägen Sie die Verwendung von YAML . Es ist fast eine Obermenge von JSON (praktisch alles gültige JSON ist gültiges YAML) und erlaubt Kommentare.

145voto

Cheery Punkte 22879

Das können Sie nicht. Zumindest ist das meine Erfahrung nach einem kurzen Blick auf json.org .

Die Syntax von JSON ist auf dieser Seite dargestellt. Es gibt keinen Hinweis auf Kommentare.

124voto

schoetbi Punkte 10841

Kommentare sind kein offizieller Standard, obwohl einige Parser Kommentare im C++-Stil unterstützen. Einer, den ich verwende, ist JsonCpp . Bei den Beispielen gibt es dieses:

// Configuration options
{
    // Default encoding for text
    "encoding" : "UTF-8",

    // Plug-ins loaded at start-up
    "plug-ins" : [
        "python",
        "c++",
        "ruby"
        ],

    // Tab indent size
    "indent" : { "length" : 3, "use_space": true }
}

jsonlint wird dies nicht bestätigt. Kommentare sind also eine parserspezifische Erweiterung und kein Standard.

Ein weiterer Parser ist JSON5 .

Eine Alternative zu JSON TOML .

Eine weitere Alternative ist jsonc .

Die neueste Version von nlohmann/json bietet optionale Unterstützung für das Ignorieren von Kommentaren beim Parsen.

101voto

mana Punkte 5927

Das habe ich in der Google Firebase-Dokumentation die es Ihnen ermöglicht, Kommentare in JSON einzufügen:

{
  "//": "Some browsers will use this to enable push notifications.",
  "//": "It is the same for all projects, this is not your project's sender ID",
  "gcm_sender_id": "1234567890"
}

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