Kann ich Kommentare innerhalb einer JSON-Datei verwenden? Wenn ja, wie?
Antworten
Zu viele Anzeigen?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!
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.
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.
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"
}