Beispiel: Ist der folgende Code für die JSON-Spezifikation gültig ?
{
precision: "zip"
}
Oder sollte ich immer die folgende Syntax verwenden? (Und wenn ja, warum?)
{
"precision": "zip"
}
Ich habe in den JSON-Spezifikationen nicht wirklich etwas darüber gefunden. Obwohl sie in ihren Beispielen Anführungszeichen um ihre Schlüssel verwenden.
json
specifications
standards-compliance
json5
christianvuerings
quelle
quelle
Sie verwenden zu Recht Zeichenfolgen als Schlüssel. Hier ist ein Auszug aus RFC 4627 - Die Anwendung / json Medientyp für JavaScript Object Notation (JSON)
Lesen Sie den ganzen RFC hier .
quelle
A string begins and ends with quotation marks.
.Ab 2.2. Objekte
und ab 2.5. Saiten
Also würde ich sagen, dass gemäß dem Standard: Ja, Sie sollten immer den Schlüssel zitieren (obwohl einige Parser verzeihender sein können)
quelle
Ja, Anführungszeichen sind obligatorisch. http://json.org/ sagt:
quelle
Ja, das tun sie. Wenn Sie etwas anderes benötigen, checken Sie JSON5 aus .
JSON5 ist eine Obermenge von JSON, die ES5-Syntax ermöglicht, einschließlich:
Die JSON5-Referenzimplementierung (
json5
npm-Paket ) bietet einJSON5
Objekt mit Methodenparse
undstringify
Methoden mit denselben Argumenten und derselben Semantik wie das integrierteJSON
Objekt.quelle
Da Sie die gepunktete Notation "parent.child" eingeben können und nicht "parent [child"] eingeben müssen, was ebenfalls gültig und nützlich ist, würde ich sagen, dass beide Möglichkeiten technisch akzeptabel sind. Die Parser sollten alle in beide Richtungen gut funktionieren. Wenn Ihr Parser keine Anführungszeichen für Schlüssel benötigt, ist es wahrscheinlich besser, diese nicht zu setzen (spart Platz). Es ist sinnvoll, sie als Zeichenfolgen zu bezeichnen, da sie genau das sind. Da die eckigen Klammern Ihnen die Möglichkeit geben, Werte für Schlüssel zu verwenden, ist es durchaus sinnvoll, dies nicht zu tun. In Json können Sie setzen ...
Ohne Probleme, wenn Sie einen Wert für einen Schlüssel benötigen und keiner in Anführungszeichen steht, funktioniert dies nicht. Wenn dies nicht der Fall ist, können Sie dies nicht. Sie benötigen also keine Anführungszeichen für Schlüssel. Auch wenn es richtig ist zu sagen, dass es sich um technische Zeichenfolgen handelt. Logik und Nutzung sprechen anders. Das Objekt {"someKey": "someValue"} für obj wird in unserem Beispiel auch nicht offiziell von der Konsole eines Browsers ausgeführt.
quelle
obj
in die Konsole eingeben, zeigt der Browser eine für Menschen lesbare Darstellung des Objekts an. Es kann es als Objektliteral anzeigen (wie in Ihrem Beispiel), oder es kann eine andere Darstellung verwenden, sogar eine interaktive. JavaScript-Objektliterale erfordern keine Anführungszeichen um einen Schlüsselnamen, wenn der Schlüssel eine gültige Kennung und kein reserviertes Wort ist. JSON erfordert jedoch immer Anführungszeichen um Schlüsselnamen.obj
Versuchen Sie als weiteres Beispiel, anstatt in die Konsole zu tippenJSON.stringify(obj)
. Jetzt sehen Sie eine gültige JSON-Darstellung des Objekts mit dem angegebenen Schlüsselnamen. Umgekehrt versuchen Sie, festzustellen, ob eine Zeichenfolge JSON-gültig istJSON.parse(string)
. Wenn die Schlüssel nicht in Anführungszeichen gesetzt sind, wird eine Ausnahme ausgelöst. Zum BeispielJSON.parse('{"a":"b"}')
wird erfolgreich sein, wird aberJSON.parse('{a:"b"}')
fehlschlagen.var obj = {[keyName]:"someValue"};
ist sehr interessant! Ich wusste nicht, dass Sie das in einem JavaScript-Objektliteral tun können. Eine kleine Überprüfung zeigt, dass dies in ES6 etwas Neues ist - in ES5 war dies nicht möglich.