comments einfügen - Können Kommentare in JSON verwendet werden?




zeilen auskommentieren (25)

Ich stelle dies gerade für Konfigurationsdateien fest. Ich möchte kein XML (ausführlich, grafisch, hässlich, schwer lesbar) oder das "ini" -Format (keine Hierarchie, kein echter Standard usw.) oder das Java-Format "Eigenschaften" (wie .ini) verwenden.

JSON kann alles, was sie können, aber es ist viel weniger ausführlich und für den Menschen lesbarer - und Parser sind in vielen Sprachen einfach und allgegenwärtig. Es ist nur ein Datenbaum. Out-of-Band-Kommentare sind jedoch oft notwendig, um "Standard" -Konfigurationen und dergleichen zu dokumentieren. Konfigurationen dürfen niemals "vollständige Dokumente" sein, sondern Bäume gespeicherter Daten, die bei Bedarf für Menschen lesbar sind.

Ich denke, man könnte "#": "comment" für "gültige" JSON verwenden.

Kann ich Kommentare in einer JSON-Datei verwenden? Wenn das so ist, wie?


Nein , Kommentare des Formulars //… oder /*…*/ sind in JSON nicht zulässig. Diese Antwort basiert auf:

  • http://www.json.org
  • RFC 4627 : Der application/json Medientyp für JavaScript-Objektnotation (JSON)
  • RFC 7159 Das JSON-Datenaustauschformat (JavaScript Object Notation) - obsoletes: 4627, 7158

Es gibt eine gute Lösung (Hack), die gültige JSON ist. Machen Sie einfach den gleichen Schlüssel zweimal (oder mehr). Zum Beispiel:

{
  "param" : "This is the comment place",
  "param" : "This is value place",
}

Also wird JSON dies verstehen als:

{
  "param" : "This is value place",
}

Dies ist eine Frage "Kannst du" . Und hier ist ein "Ja" Antwort.

Nein, Sie sollten keine doppelten Objektelemente verwenden, um Seitenkanaldaten in eine JSON-Codierung zu füllen. (Siehe "Die Namen innerhalb eines Objekts SOLLTEN eindeutig sein" im RFC ).

Und ja, Sie könnten Kommentare rund um die JSON einfügen , die Sie analysieren könnten.

Wenn Sie jedoch eine Möglichkeit wünschen, beliebige Seitenkanaldaten in eine gültige JSON einzufügen und daraus zu extrahieren, finden Sie hier eine Antwort. Wir nutzen die nicht eindeutige Darstellung von Daten in einer JSON-Codierung. Dies ist zulässig , * in Abschnitt zwei des RFC unter „Leerzeichen vor oder nach einem der sechs strukturellen Zeichen erlaubt“.

* Der RFC gibt nur an, dass "Leerzeichen vor oder nach einem der sechs Strukturzeichen zulässig ist", wobei Strings, Zahlen, "false", "true" und "null" nicht explizit erwähnt werden. Diese Auslassung wird in ALLEN Implementierungen ignoriert.

Kanonisieren Sie zunächst Ihr JSON, indem Sie es minimieren:

$jsonMin = json_encode(json_decode($json));

Dann codiere deinen Kommentar in binär:

$hex = unpack('H*', $comment);
$commentBinary = base_convert($hex[1], 16, 2);

Dann steg deine Binärdatei:

$steg = str_replace('0', ' ', $commentBinary);
$steg = str_replace('1', "\t", $steg);

Hier ist Ihre Ausgabe:

$jsonWithComment = $steg . $jsonMin;

Wir verwenden strip-json-commentsfür unser Projekt. Es unterstützt so etwas wie:

/*
 * Description 
*/
{
    // rainbows
    "unicorn": /* ❤ */ "cake"
}

Einfach npm install --save strip-json-commentszu installieren und verwenden, wie:

var strip_json_comments = require('strip-json-comments')
var json = '{/*rainbows*/"unicorn":"cake"}';
JSON.parse(strip_json_comments(json));
//=> {unicorn: 'cake'}

JSON unterstützt keine nativen Kommentare. Sie können jedoch einen eigenen Decoder oder zumindest einen Präprozessor erstellen, um Kommentare auszusortieren. Das ist vollkommen in Ordnung (solange Sie nur Kommentare ignorieren und nicht verwenden, um zu bestimmen, wie Ihre Anwendung die JSON-Daten verarbeitet ).

JSON hat keine Kommentare. Ein JSON-Encoder MUSS KEINE Kommentare ausgeben. Ein JSON-Decoder KANN Kommentare akzeptieren und ignorieren.

Kommentare sollten niemals dazu verwendet werden, etwas Sinnvolles zu übermitteln. Dafür gibt es JSON.

Vgl .: Douglas Crockford, Autor von JSON spec .


HAFTUNGSAUSSCHLUSS: IHRE GARANTIE IST NICHTIG

Wie bereits erwähnt, nutzt dieser Hack die Implementierung der Spezifikation. Nicht alle JSON-Parser werden diese Art von JSON verstehen. Insbesondere Streaming-Parser werden verschlucken.

Es ist eine interessante Neugier, aber man sollte sie überhaupt nicht für irgendetwas verwenden . Unten ist die ursprüngliche Antwort.

Ich habe einen kleinen Hack gefunden, der es Ihnen ermöglicht, Kommentare in eine JSON-Datei einzufügen, die sich nicht auf die Analyse auswirken oder die dargestellten Daten auf irgendeine Weise ändern.

Es scheint, dass Sie beim Deklarieren eines Objektliteral zwei Werte mit demselben Schlüssel angeben können, wobei der letzte Vorrang hat. Ob Sie es glauben oder nicht, es stellt sich heraus, dass JSON-Parser auf dieselbe Weise arbeiten. Daher können wir dies verwenden, um Kommentare in der Quell-JSON 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 folgendermaßen 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 ist gültiger 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 heißt, es gibt keine Spur von Kommentaren und sie haben keine seltsamen Nebenwirkungen.

Viel Spaß beim Hacken!


Die Idee hinter JSON ist der einfache Datenaustausch zwischen Anwendungen. Diese sind normalerweise webbasiert und die Sprache ist JavaScript.

Kommentare als solche sind eigentlich nicht erlaubt, aber das Übergeben eines Kommentars als eines der Name / Wert-Paare in den Daten würde sicherlich funktionieren, obwohl diese Daten offensichtlich ignoriert werden müssen oder speziell vom Analysecode behandelt werden müssen.

Alles in allem ist es nicht beabsichtigt, dass die JSON-Datei Kommentare im herkömmlichen Sinne enthält. Es sollten nur die Daten sein.

Weitere Informationen finden Sie auf der JSON-Website .


JSON ist für Konfigurationsdateien und andere lokale Anwendungen sehr sinnvoll, da es allgegenwärtig ist und viel einfacher ist als XML.

Wenn Menschen starke Gründe gegen Kommentare in JSON haben, wenn Daten übermittelt werden (ob gültig oder nicht), könnte JSON möglicherweise in zwei Teile aufgeteilt werden:

  • JSON-COM: JSON auf der Leitung oder Regeln, die bei der Kommunikation von JSON-Daten gelten.
  • JSON-DOC: JSON-Dokument oder JSON in Dateien oder lokal. Regeln, die ein gültiges JSON-Dokument definieren.

JSON-DOC lässt Kommentare zu, und es können andere geringfügige Unterschiede vorhanden sein, z. B. die Verarbeitung von Leerzeichen. Parser können leicht von einer Spezifikation zur anderen konvertieren.

In Bezug auf die plus.google.com/118095276221607585885/posts/RK8qyGVaGSr von Douglas Crockford zu diesem Thema (von @Artur Czajka referenziert)

Angenommen, Sie verwenden JSON, um Konfigurationsdateien aufzubewahren, die Sie mit Anmerkungen versehen möchten. Fahren Sie fort und fügen Sie alle gewünschten Kommentare ein. Leiten Sie es dann durch JSMin, bevor Sie es Ihrem JSON-Parser übergeben.

Wir reden hier über ein generisches Problem mit Konfigurationsdateien (sprachenübergreifend / Plattform) und er antwortet mit einem JS-spezifischen Dienstprogramm!

Sicher, ein JSON-spezifisches Minify kann in jeder Sprache implementiert werden, aber standardisieren Sie es, damit es in allen Sprachen und Plattformen allgegenwärtig ist, sodass die Benutzer keine Zeit mehr mit dem Feature verschwenden, weil sie gute Anwendungsfälle haben und das Problem untersuchen Online-Foren, und die Leute werden dazu aufgefordert, ihnen mitzuteilen, dass dies eine schlechte Idee ist, oder den Vorschlag, es sei einfach, Kommentare aus Textdateien zu entfernen.

Das andere Problem ist die Interoperabilität. Angenommen, Sie haben eine Bibliothek oder API oder ein beliebiges Subsystem, dem einige Konfigurations- oder Datendateien zugeordnet sind. Und dieses Subsystem ist aus verschiedenen Sprachen zugänglich. Dann erzählst du es den Leuten: Vergiss nicht, die Kommentare aus den JSON-Dateien herauszunehmen, bevor du sie an den Parser weiterleitest!


Wir können leider keine Kommentare in JSON verwenden ... Siehe das Syntaxdiagramm für JSON auf JSON.org .

Douglas Crockford sagt, " plus.google.com/118095276221607585885/posts/RK8qyGVaGSr ":

Ich habe Kommentare aus JSON entfernt, weil ich sah, dass die Leute sie verwendeten, um Direktive zu parsen, eine Praxis, die die Interoperabilität zerstört hätte. Ich weiß, dass der Mangel an Kommentaren manche Menschen traurig macht, aber das sollte nicht.

Angenommen, Sie verwenden JSON, um Konfigurationsdateien aufzubewahren, die Sie mit Anmerkungen versehen möchten. Fahren Sie fort und fügen Sie alle gewünschten Kommentare ein. Leiten Sie es dann durch JSMin, bevor Sie es Ihrem JSON-Parser übergeben.


Fügen Sie bei Bedarf Kommentare hinzu. streichen Sie sie vor dem Parsen oder Übertragen mit einem Minifier aus.

Ich habe gerade JSON.minify() das Kommentare und Leerzeichen aus einem JSON-Block entfernt und ihn zu einem gültigen JSON macht, der analysiert werden kann. Sie könnten es also wie folgt verwenden:

JSON.parse(JSON.minify(my_str));

Als ich es veröffentlichte, kam es zu einer großen Gegenreaktion von Leuten, die nicht einmal mit der Idee einverstanden waren. Daher entschied ich, dass ich einen umfassenden Blogbeitrag darüber schreiben würde, warum Kommentare in JSON Sinn machen . Es enthält diesen bemerkenswerten Kommentar des Erstellers von JSON:

Angenommen, Sie verwenden JSON, um Konfigurationsdateien aufzubewahren, die Sie mit Anmerkungen versehen möchten. Fahren Sie fort und fügen Sie alle gewünschten Kommentare ein. Leiten Sie es dann durch JSMin, bevor Sie es Ihrem JSON-Parser übergeben. - plus.google.com/118095276221607585885/posts/RK8qyGVaGSr

Hoffentlich ist das hilfreich für diejenigen, die nicht einverstanden sind, warum JSON.minify () nützlich sein könnte.


Um ein JSON-Element in Teile zu schneiden, füge ich "Dummy-Kommentar" -Zeilen hinzu:

{

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

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

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

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

}

Mit dem JavaScript-Toolkit von Dojo Toolkit (mindestens ab Version 1.4) können Sie Kommentare in Ihre JSON einfügen. Die Kommentare können ein /* */Format haben. Dojo Toolkit verbraucht den JSON über den dojo.xhrGet()Aufruf.

Andere JavaScript-Toolkits funktionieren möglicherweise ähnlich.

Dies kann hilfreich sein, wenn Sie mit alternativen Datenstrukturen (oder sogar Datenlisten) experimentieren, bevor Sie eine endgültige Option auswählen.


Du kannst nicht Zumindest ist das meine Erfahrung aus einem kurzen Blick auf JSON.org .

JSON lässt seine Syntax auf dieser Seite anzeigen. Es gibt keine Anmerkung zu Kommentaren.


Sie sollten stattdessen ein JSON-Schema schreiben. Das JSON-Schema ist derzeit eine vorgeschlagene Internet-Entwurfsspezifikation. Neben der Dokumentation kann das Schema auch zur Validierung Ihrer JSON-Daten verwendet werden.

Beispiel:

{
    "description":"A person",
    "type":"object",
    "properties":
        {
            "name":
                {
                    "type":"string"
                },
            "age":
                {
                    "type":"integer",
                    "maximum":125
                }
        }
}

Sie können Dokumentation bereitstellen, indem Sie das Attribut " Beschreibungsschema" verwenden .


Der Autor von JSON möchte, dass wir Kommentare in die JSON aufnehmen, diese jedoch entfernen, bevor sie analysiert werden (siehe plus.google.com/118095276221607585885/posts/RK8qyGVaGSr von Michael Burr). Wenn JSON Kommentare haben sollte, warum sollten Sie sie nicht standardisieren und den JSON-Parser die Arbeit erledigen lassen? Ich stimme der Logik dort nicht zu, aber das ist leider der Standard. Die Verwendung einer YAML-Lösung, wie von anderen vorgeschlagen, ist gut, erfordert jedoch eine Bibliotheksabhängigkeit.

Wenn Sie Kommentare entfernen möchten, aber keine Bibliotheksabhängigkeit haben möchten, finden Sie hier eine zweizeilige Lösung, die für Kommentare im C ++ - Stil funktioniert, aber 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 keinen Kommentarinitiator enthalten, z. B. ('//').

Eine weitere Möglichkeit, JSON-Analyse, das Entfernen von Kommentaren und keine zusätzliche Bibliothek zu erreichen, besteht darin, die JSON-Funktion in einem JavaScript-Interpreter auszuwerten. Der Nachteil bei diesem Ansatz ist natürlich, dass Sie nur unbeschädigte Daten auswerten möchten (keine nicht vertrauenswürdigen Benutzereingaben). Hier ist ein Beispiel für diesen Ansatz in Node.js. Eine weitere Einschränkung liest das folgende Beispiel die Daten nur einmal und wird dann zwischengespeichert:

data = require(fs.realpathSync(doctree_fp));

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.


Folgendes habe ich in der Google Firebase-Dokumentation gefunden, in der Sie Kommentare in JSON einfügen können:

{
  "//": "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"
}

Das hängt von Ihrer JSON-Bibliothek ab. Json.NET unterstützt Kommentare im JavaScript-Stil /* commment */.

Siehe eine andere -Frage .


JSON unterstützt keine Kommentare. Es war auch nie dazu gedacht, für Konfigurationsdateien verwendet zu werden, in denen Kommentare erforderlich wären.

Hjson ist ein Konfigurationsdateiformat für Menschen. Entspannte Syntax, weniger Fehler, mehr Kommentare.

Siehe hjson.org für JavaScript, Java, Python, PHP, Rust, Go, Ruby und C # -Bibliotheken.


Kommentare wurden von Design aus JSON entfernt.

Ich habe Kommentare aus JSON entfernt, weil ich sah, dass die Leute sie verwendeten, um Direktive zu parsen, eine Praxis, die die Interoperabilität zerstört hätte. Ich weiß, dass der Mangel an Kommentaren manche Menschen traurig macht, aber das sollte nicht.

Angenommen, Sie verwenden JSON, um Konfigurationsdateien aufzubewahren, die Sie mit Anmerkungen versehen möchten. Fahren Sie fort und fügen Sie alle gewünschten Kommentare ein. Leiten Sie es dann durch JSMin, bevor Sie es Ihrem JSON-Parser übergeben.

Quelle: plus.google.com/118095276221607585885/posts/RK8qyGVaGSr


Nein.

Das JSON sollte aus Daten bestehen. Wenn Sie einen Kommentar hinzufügen, werden es auch Daten sein.

Sie könnten ein bestimmtes Datenelement namens "_comment" (oder etwas "_comment" ) haben, das von Apps ignoriert wird, die JSON-Daten verwenden.

Es wäre wahrscheinlich besser, den Kommentar in den Prozessen zu haben, die die JSON generieren / empfangen, da diese wissen sollen, welche JSON-Daten im Voraus vorliegen oder zumindest deren Struktur.

Aber wenn Sie beschlossen haben:

{
   "_comment": "comment text goes here...",
   "glossary": {
      "title": "example glossary",
      "GlossDiv": {
         "title": "S",
         "GlossList": {
            "GlossEntry": {
               "ID": "SGML",
               "SortAs": "SGML",
               "GlossTerm": "Standard Generalized Markup Language",
               "Acronym": "SGML",
               "Abbrev": "ISO 8879:1986",
               "GlossDef": {
                  "para": "A meta-markup language, used to create markup languages such as DocBook.",
                  "GlossSeeAlso": ["GML", "XML"]
               },
               "GlossSee": "markup"
            }
         }
      }
   }
}

Wenn Sie Jackson als JSON-Parser verwenden, aktivieren Sie ihn, um Kommentare zuzulassen:

ObjectMapper mapper = new ObjectMapper().configure(Feature.ALLOW_COMMENTS, true);

Dann können Sie Kommentare wie diese haben:

{
  key: "value" // Comment
}

Sie können auch Kommentare haben, die mit # indem Sie Folgendes festlegen:

mapper.configure(Feature.ALLOW_YAML_COMMENTS, true);

Im Allgemeinen erlaubt die Spezifikation (wie bereits beantwortet) keine Kommentare.


Seufzer. Warum nicht einfach Felder hinzufügen, z

{
    "note1" : "This demonstrates the provision of annotations within a JSON file",
    "field1" : 12,
    "field2" : "some text",

    "note2" : "Add more annotations as necessary"
}

Stellen Sie nur sicher, dass Ihre "Notex" -Namen keinen Konflikt mit echten Feldern haben.


Emacs hat comment-dwim (Mach was ich meine) - wähle einfach den Block und mache ein:

M-;

Es ist ein Toggle - verwenden Sie es, um Blöcke kommentieren und auskommentieren.

Wenn Sie den Yaml-Modus nicht installiert haben, müssen Sie Emacs mitteilen, das Hash-Zeichen (#) zu verwenden.







json comments