2009-06-04 6 views

Antwort

117

Ja, Sie brauchen Anführungszeichen. Dies ist, um es einfacher zu machen und zu vermeiden, eine andere Escape-Methode für Javascript reservierte Schlüsselwörter haben, dh {for:"foo"}.

+8

Die Anführungszeichen sind in vielen Situationen nicht einfacher, wie z. B. Konfigurationsdateien, die von Hand bearbeitet werden. Die unglückliche Sache, dass JSON als fast universelles Austauschformat verwendet (und missbraucht) wird, ist die Tatsache, dass es Java-spezifische Merkmale aufweist. – miguel

+5

Wirklicher Grund - überprüfen Sie diese Antwort auch - http://stackoverflow.com/questions/4201441/is-there-any-practical-reason-to-use-quoted-strings-for-json-keys – TechMaze

120

Sie sind richtig, Zeichenfolgen als Schlüssel zu verwenden. Hier ist ein Auszug aus RFC 4627 - The application/json Medientyp für JavaScript Object Notation (JSON)

2,2. Objekte

Eine Objektstruktur wird als ein Paar geschweifter Klammern dargestellt, das null oder mehr Name/Wert-Paare (oder -Member) umgibt. Ein Name ist eine Zeichenfolge. Nach jedem Namen folgt ein einzelner Doppelpunkt, der den Namen vom Wert trennt. Ein einzelnes Komma trennt einen Wert von einem folgenden Namen. Die Namen innerhalb eines Objekts SOLLTEN eindeutig sein.

object = begin-object [ member *(value-separator member) ] end-object

member = string name-separator value

[...]

2.5. Zeichenfolgen

Die Darstellung von Zeichenfolgen ähnelt den Konventionen, die in der Programmiersprachenfamilie C verwendet werden. Eine Zeichenfolge beginnt und endet mit Anführungszeichen. [...]

string = quotation-mark *char quotation-mark

quotation-mark = %x22 ; "

Lesen Sie den ganzen RFC here.

+8

Und um den Gedanken zu beenden , Abschnitt 2.5 sagt: 'Eine Zeichenfolge beginnt und endet mit Anführungszeichen. – rakslice

+0

Danke @ Rakslice. Ich habe die Antwort aktualisiert – PatrikAkerstrand

+1

Neueste RFC: http://tools.ietf.org/html/rfc7159 – Necreaux

11

Von 2.2. Objekte

Eine Objektstruktur wird als ein Paar geschweifter Klammern dargestellt, die keine oder mehrere Name/Wert-Paare (oder -Member) umgeben. Ein Name ist eine Zeichenfolge.

und von 2.5.Zeichenfolgen

Eine Zeichenfolge beginnt und endet in Anführungszeichen.

Also ich würde sagen, dass nach dem Standard: ja, sollten Sie immer den Schlüssel zitieren

-2

(obwohl einige Parser toleranter sein kann) Da Sie „parent.child“ Punktnotation setzen und Sie muss nicht Elternteil ["Kind"], was auch gültig und nützlich ist, würde ich sagen, beide Möglichkeiten ist technisch akzeptabel. Die Parser sollten alles gut machen. Wenn Ihr Parser keine Anführungszeichen für Schlüssel benötigt, ist es wahrscheinlich besser, sie nicht zu setzen (spart Platz). Es macht Sinn, sie Strings zu nennen, weil sie das sind, und da die eckigen Klammern Ihnen die Möglichkeit geben, Werte für Schlüssel zu verwenden, ist es im Grunde genommen sinnvoll, sie nicht zu verwenden. In Json können Sie setzen ...

>var keyName = "someKey"; 
>var obj = {[keyName]:"someValue"}; 

>obj 
Object {someKey: "someValue"} 

ohne Probleme ganz gut, wenn Sie einen Wert für einen Schlüssel benötigen und keine zitiert wird nicht funktionieren, so dass, wenn es nicht funktioniert kann man nicht, so Sie werden nicht so "Sie brauchen keine Anführungszeichen auf Schlüsseln". Auch wenn es richtig ist zu sagen, dass sie technisch Strings sind. Logik und Verwendung argumentieren anders. Es gibt auch offiziell kein Objekt {"someKey": "someValue"} für obj in unserem Beispiel aus der Konsole eines beliebigen Browsers.

+0

Sowohl die akzeptierte Antwort und der RFC, der JSON definiert, sagen, dass die Anführungszeichen erforderlich sind. –

+0

Das ist wahr, aber es ist es wert, es logisch zu notieren muss es nicht. Ich nehme an, eine JavaScript Object Notation Ausgabe von allen Browser-Konsolen ist falsch, und wir sollten jemandem sagen, das zu beheben. Vielleicht ist das, was eine Browser-Konsole für ein Objekt ausgibt, nicht JSON, also wird JSON, wie die Spezifikation definiert, vielleicht an den meisten Stellen nicht benötigt oder implementiert. Jedenfalls wollte ich nur den Fall darlegen, der die Fakten in einem anderen Licht betrachtet. Wirklich vielleicht sollte die Spezifikation dann geändert werden, "Quoted Keys" wird einfach nirgendwo gebraucht, was für mich persönlich wichtig ist. (Es wird in der Praxis einfach nicht so verwendet.) –

+0

Sie vermischen drei verschiedene Dinge: JSON, JavaScript-Objektliterale und die Konsolenausgabe der Browser-Entwickler-Tools. Wenn Sie in der Konsole Ihr 'obj' eingeben, zeigt der Browser eine lesbare Darstellung des Objekts an. Es kann es als Objektliteral anzeigen (wie in Ihrem Beispiel), oder es kann eine andere Darstellung, sogar eine interaktive, verwenden. JavaScript-Objektliterale benötigen keine Anführungszeichen um einen Schlüsselnamen, wenn der Schlüssel ein gültiger Bezeichner und kein reserviertes Wort ist. JSON _always_ erfordert jedoch Anführungszeichen um Schlüsselnamen. –

Verwandte Themen