Tun die JSON-Schlüssel haben, werden diese von Anführungsstrichen umgeben sind?
Beispiel:
Ist der folgende code gültig gegen die JSON Spec?
{
precision: "zip"
}
Oder sollte ich immer die folgende syntax verwenden? (Und wenn ja, warum?)
{
"precision": "zip"
}
Ich habe nicht wirklich etwas gefunden über diese in der JSON-Spezifikationen. Obwohl Sie verwenden Anführungszeichen, um Ihre Schlüssel in Ihre Beispiele.
InformationsquelleAutor christianvuerings | 2009-06-04
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ja, Sie müssen von Anführungszeichen. Dies ist, um es einfacher zu machen und um zu vermeiden, dass ein anderes escape-Methode für javascript reserviert, keywords, ie
{for:"foo"}
.Echtes Grund - aktivieren Sie diese Antwort auch - stackoverflow.com/questions/4201441/...
Tl;dr: Sie wollen sich nicht auseinandersetzen mit der ECMAScript-Begrenzung (ohne Anführungszeichen) reservierte Schlüsselwörter als Schlüssel, so dass Sie nur benötigt, zitieren alle Tasten.
InformationsquelleAutor cobbal
Sind Sie richtig zu verwenden strings als Schlüssel. Hier ist ein Auszug aus RFC 4627 - The application/json Media Type for JavaScript Object Notation (JSON)
Lesen Sie das gesamte RFC hier.
A string begins and ends with quotation marks.
.Danke @rakslice. Ich habe aktualisiert die Antwort
Neueste RFC: tools.ietf.org/html/rfc7159
InformationsquelleAutor PatrikAkerstrand
Vom 2.2. Objekte
und von 2.5. Strings
Also ich würde sagen, dass gemäß der Norm: ja, Sie sollten immer zitieren, der Schlüssel (obwohl einige Parser kann mehr verzeihen)
InformationsquelleAutor Cebjyre
Ja, die Anführungszeichen sind obligatorisch. http://json.org/ sagt:
InformationsquelleAutor
Da können Sie sich setzen "Eltern.Kind" dotted-notation, die Sie nicht haben, um setzen parent["Kind"] der ist auch gültig und nützlich sind, würde ich sagen, dass beide Möglichkeiten technisch akzeptabel. Der Parser sollte alles tun, in beide Richtungen einwandfrei. Wenn dein parser braucht keine Zitate auf die Tasten, dann ist es wahrscheinlich besser, nicht zu setzen (spart Platz). Macht es Sinn Sie zu nennen Saiten, weil das ist, was Sie sind, und da die eckigen Klammern gibt Ihnen die Fähigkeit, verwenden Sie die Werte für Schlüssel im wesentlichen macht es durchaus Sinn, nicht zu.
In Json können Sie die...
ganz gut ohne Probleme, wenn Sie einen Wert für einen Schlüssel und keiner zitiert nicht funktionieren, also wenn es nicht funktioniert, können Sie nicht, so dass Sie nicht so "Sie brauchen keine Zitate auf die Tasten". Auch wenn es richtig ist, zu sagen, Sie sind technisch strings. Logik und Verwendung anders argumentieren. Noch ist es offiziell ausgabeobjekt {"someKey": "Wert"} obj in unserem Beispiel führen Sie aus der Konsole von jedem beliebigen browser aus.
Das ist wahr, aber es ist erwähnenswert, die es logisch gar nicht brauchen. Ich vermute ein JavaScript-Object-Notation-Ausgabe, von der alle browser-Konsole ist falsch, und wir sollten sagen, jemand, dass zu beheben. Vielleicht, was ein Browser-Konsole Ausgänge für ein Objekt ist nicht als JSON, so dass vielleicht von JSON als die spec definiert ist, nicht benötigt und auch umgesetzt, dass der Weg in den meisten Orten. Trotzdem wollte ich den Fall, das sieht die Tatsachen in einem anderen Licht. Wirklich vielleicht die Skillung sollte geändert werden, dann", Zitiert die Schlüssel", ist einfach nicht nötig, überall dort, wo Fragen an mich persönlich. (Es ist einfach nicht, so verwendet in der Praxis.)
Mischen Sie bis zu drei verschiedene Dinge: JSON, die JavaScript object-literalen, und die browser-Entwickler-tools die Ausgabe in der Konsole. Wenn Sie geben Sie Ihre
obj
in der Konsole zeigt der browser einige Menschen lesbare Repräsentation des Objekts. Es erscheint ein Objekt-literal (wie in deinem Beispiel), oder es kann eine andere Darstellung, auch eine interaktive. JavaScript Objekt-Literale erfordern keine Anführungszeichen um einen Namen für den Schlüssel ein, wenn der Schlüssel ein Gültiger Bezeichner sein und nicht ein reserviertes Wort. Jedoch, JSON immer erfordert, dass Sie Anführungszeichen um die Namen von Tasten.Als weitere Beispiele einzugeben, sondern
obj
in der Konsole versuchenJSON.stringify(obj)
. Nun sehen Sie ein gültiges JSON-Repräsentation des Objekts, komplett mit zitiert-Taste name. Umgekehrt, um zu sehen, ob ein string ein gültiges JSON, versuchenJSON.parse(string)
. Wenn der Schlüssel nicht angegeben ist, wird dies eine exception werfen. Zum BeispielJSON.parse('{"a":"b"}')
erfolgreich sein wird, aberJSON.parse('{a:"b"}')
fehl.OTOH, Ihre Nutzung
var obj = {[keyName]:"someValue"};
ist sehr interessant! Ich wusste nicht, dass Sie tun könnte, dass in einem JavaScript-Objekt-literal. Ein bisschen überprüfung zeigt, dass dies etwas neues in ES6 - Sie konnte es nicht in ES5.InformationsquelleAutor Master James