我認爲Cheeso問題的正確答案是實現超過了文檔。它不再需要一個字符串作爲關鍵字,而是需要其他東西,它可以是一個字符串(即引號)或(可能)任何可以用作變量名的東西,我猜測它意味着以字母開頭,_或$,只包括字母,數字和$和_。
我想簡化休息誰訪問與我一樣的想法這個問題,旁邊的人。這裏的肉:
變量名沒有在JSON插值爲對象鍵(!感謝Friedo)
布列塔尼,使用「標識」,而不是「關鍵」,寫時說:「如果一個標識符恰好是一個保留字,它被解釋爲該字而不是標識符。「這可能是真的,但我想它沒有任何麻煩:
var a = {do:1,long:2,super:3,abstract:4,var:5,break:6,boolean:7};
a.break
=> 6
關於使用引號,昆汀寫道:」 ......但你不就得了,除非[關鍵]包含某些字符(或字符的組合,這將使它關鍵字)」
我找到了前半部分(某些字符)爲真,用@符號(其實我覺得$和_是隻有不會導致錯誤的字符):
var a = {[email protected]:1};
=>語法錯誤
var a = {"[email protected]":1};
a['[email protected]']
=> 1
但括號關於關鍵字,如我上面顯示,是不正確的。
我想要的作品是因爲開頭{和冒號之間的文本,或者逗號和冒號之間的文本被用作不帶引號的字符串來創建對象鍵,或者像弗裏多所說的那樣,它是一個變量名字裏有沒有得到插值:
var uid = getUID();
var token = getToken(); // Returns ABC123
var data = {uid:uid,token:token};
data.token
=> ABC123
你是什麼意思「的JSON」的意思是隻允許?它使「JSON」看起來像一種編程語言。 – 2010-01-14 22:21:33
@布魯諾:你可以用同樣的方式談論XML ......可悲的是,有些人可能會嘗試使用XML作爲編程語言...... – 2010-01-14 22:24:48
+1 ......它看起來像一個奇特的矛盾。 ..「帶引號」使其成爲標準的JSON,但不會與'eval()'(即javascript)一起使用。 – skaffman 2010-01-14 22:24:55