zeilen - Können Kommentare in JSON verwendet werden?




swagger json comment (20)

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 .

https://code.i-harness.com

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


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.


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"
}

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!


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 sind kein offizieller Standard. Einige Parser unterstützen zwar Kommentare im C-Stil. Eines, das ich benutze, ist JsonCpp . In den Beispielen gibt es folgendes:

// 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 bestätigt dies nicht. Kommentare sind also eine parserspezifische Erweiterung und kein Standard.

Ein weiterer Parser ist JSON5 .

Eine Alternative zu JSON TOML .


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"
            }
         }
      }
   }
}

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.


Wenn Ihre Textdatei, bei der es sich um eine JSON-Zeichenfolge handelt, von einem Programm gelesen werden kann, wie schwierig wäre es, Kommentare im C- oder C ++ - Stil zu entfernen, bevor Sie sie verwenden?

Antwort: Es wäre ein Einzeiler. In diesem Fall können JSON-Dateien als Konfigurationsdateien verwendet werden.


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.


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.


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

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!


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"

}

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

Siehe eine andere -Frage .


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;

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",
}

Sie können Kommentare in JSONP , aber nicht in reinem JSON. Ich habe gerade eine Stunde damit verbracht, mein Programm mit diesem Beispiel von Highcharts zum Laufen zu bringen: http://www.highcharts.com/samples/data/jsonp.php?filename=aapl-c.json&callback=?

Wenn Sie dem Link folgen, werden Sie sehen

?(/* AAPL historical OHLC data from the Google Finance API */
[
/* May 2006 */
[1147651200000,67.79],
[1147737600000,64.98],
...
[1368057600000,456.77],
[1368144000000,452.97]
]);

Da ich eine ähnliche Datei in meinem lokalen Ordner hatte, gab es keine Probleme mit der Same-Origin-Richtlinie . Daher entschied ich mich, reines JSON zu verwenden ... und scheiterte natürlich $.getJSONan den Kommentaren.

Irgendwann habe ich nur eine manuelle HTTP-Anfrage an die obige Adresse gesendet und festgestellt, dass der Inhaltstyp war, text/javascriptda JSONP reines JavaScript zurückgibt. In diesem Fall sind Kommentare erlaubt . Aber meine Anwendung hat den Inhaltstyp zurückgegeben application/json, daher musste ich die Kommentare entfernen.


Wenn Sie JSON5 , können Sie Kommentare JSON5 .

JSON5 ist eine vorgeschlagene Erweiterung von JSON , die es dem Menschen erleichtern soll, von Hand zu schreiben und zu warten. Dazu werden einige minimale Syntaxfunktionen direkt aus ECMAScript 5 hinzugefügt.





comments