Frage Können Kommentare in JSON verwendet werden?


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


5777
2017-10-28 20:39


Ursprung


Antworten:


Nein.

Der JSON sollte allesamt Daten sein, und wenn Sie einen Kommentar hinzufügen, dann sind es auch Daten.

Sie könnten ein benanntes Datenelement aufrufen "_comment" (oder etwas), das von Apps ignoriert würde, die die JSON-Daten verwenden.

Sie würden wahrscheinlich den Kommentar in den Prozessen, die JSON generieren / empfangen, besser haben, da sie wissen sollen, was die JSON-Daten im Voraus sein werden oder zumindest die Struktur davon.

Aber wenn Sie sich entschieden 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"
            }
         }
      }
   }
}

4047
2017-10-28 21:01



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

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

1566
2017-11-15 09:32



Fügen Sie Kommentare hinzu, wenn Sie wählen; streichen Sie sie vor dem Parsen oder Übertragen mit einem Minifier aus.

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

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

Als ich es veröffentlichte, bekam ich eine riesige Gegenreaktion von Leuten, die sogar mit der Idee davon nicht übereinstimmten, also entschied ich, dass ich einen umfassenden Blogbeitrag über warum schreiben würde Kommentare machen Sinn in JSON. Es enthält diesen bemerkenswerten Kommentar vom Schöpfer von JSON:

Angenommen, Sie verwenden JSON, um Konfigurationsdateien zu behalten, die Sie mit Anmerkungen versehen möchten. Gehen Sie voran und fügen Sie alle Kommentare ein, die Sie mögen. Führen Sie es dann durch JSMin, bevor Sie es an Ihren JSON-Parser übergeben. - Douglas Crockford, 2012

Hoffentlich ist das hilfreich für diejenigen, die nicht mit dem Warum übereinstimmen JSON.minify () könnte nützlich sein.


677
2018-06-23 18:20



Kommentare wurden per Entwurf aus JSON entfernt.

Ich entfernte Kommentare von JSON, weil ich gesehen habe, dass Leute sie verwendeten, um Parsing-Anweisungen zu halten, eine Vorgehensweise, die die Interoperabilität zerstört hätte. Ich weiß, dass der Mangel an Kommentaren manche Menschen traurig macht, aber das sollte nicht so sein.

Angenommen, Sie verwenden JSON, um Konfigurationsdateien zu behalten, die Sie mit Anmerkungen versehen möchten. Gehen Sie voran und fügen Sie alle Kommentare ein, die Sie mögen. Führen Sie es dann durch JSMin, bevor Sie es an Ihren JSON-Parser übergeben.

Quelle: Öffentliche Stellungnahme von Douglas Crockford zu G +


378
2018-06-11 08:52



HAFTUNGSAUSSCHLUSS: IHRE GARANTIE IST NICHT ERLAUBT

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 ersticken.

Es ist eine interessante Neugier, aber Sie sollte es wirklich für nichts verwenden. Unten ist die ursprüngliche Antwort.


Ich habe einen kleinen Hack gefunden, mit dem Sie Kommentare in eine JSON-Datei schreiben können, die das Parsen nicht beeinflusst, oder die Daten, die in irgendeiner Weise dargestellt werden, verändern.

Offensichtlich können Sie beim Deklarieren eines Objektliterals zwei Werte mit demselben Schlüssel angeben, wobei der letzte Vorrang hat. Ob Sie es glauben oder nicht, es stellt sich heraus, dass JSON-Parser auf die gleiche Weise funktionieren. Damit können wir Kommentare im Quell-JSON erstellen, die in einer analysierten 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 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 bedeutet, dass es keine Spur von den Kommentaren gibt und sie keine seltsamen Nebenwirkungen haben werden.

Fröhliches Hacken!


192
2017-08-02 13:46



JSON unterstützt keine Kommentare. Es war auch nie dazu gedacht, für Konfigurationsdateien verwendet zu werden, in denen Kommentare benötigt würden.

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

Hjson intro

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


123
2018-03-20 15:26



Du kannst nicht. Zumindest ist das meine Erfahrung aus einem kurzen Blick auf json.de.

JSON hat seine Syntax auf dieser Seite visualisiert. Es gibt keine Notiz über Kommentare.


95
2017-10-28 20:42



Erwägen Sie die Verwendung von YAML. Es ist fast eine Obermenge von JSON (praktisch alle gültigen JSON ist gültig YAML) und es ermöglicht Kommentare.


86
2017-08-31 02:24



Du solltest ein schreiben JSON-Schema stattdessen. 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 Beschreibung Schemaattribut


55
2017-07-28 18:38



Wenn Sie verwenden Jackson Als JSON-Parser können Sie auf diese Weise Kommentare aktivieren:

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

Dann können Sie Kommentare wie folgt haben:

{
  key: "value" // comment
}

Und Sie können auch Kommentare haben, die mit beginnen # indem man es einstellt:

mapper.configure(Feature.ALLOW_YAML_COMMENTS, true);    

Aber im Allgemeinen (wie zuvor beantwortet) erlaubt die Spezifikation keine Kommentare.


51
2018-02-06 20:44



Kommentare sind kein offizieller Standard. Einige Parser unterstützen C-Style-Kommentare. Eine, die ich benutze ist JsonCpp. In 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 bestätigt dies nicht. Kommentare sind also eine parserspezifische Erweiterung und kein Standard.

Ein anderer Parser ist JSON5.

Eine Alternative zu JSON TOML.


49
2017-10-26 09:46