2009-06-04 87 views
175

例如: 下面的代碼是否對JSON Spec有效?JSON規範 - 密鑰是否必須用引號括起來?

{ 
    precision: "zip" 
} 

或者我應該總是使用下面的語法? (如果是這樣,爲什麼?)

{ 
    "precision": "zip" 
} 

我還沒有真正在JSON規範中找到關於此的東西。雖然他們在他們的例子中使用了引號。 (所以我現在要這樣做)

回答

117

是的,你需要引號。這是爲了使它更簡單,並避免必須有另一個用於javascript保留關鍵字的轉義方法,即{for:"foo"}

+8

在很多情況下,引號並不簡單,例如手動編輯的配置文件。關於JSON被使用(和濫用)作爲幾乎通用的交換格式的不幸之處在於它具有特定於Javascript的功能。 – miguel 2015-01-13 22:56:47

+5

真正的原因 - 也檢查這個答案 - http://stackoverflow.com/questions/4201441/is-there-any-practical-reason-to-use-quoted-strings-for-json-keys – TechMaze 2015-07-01 00:07:00

120

你是正確的使用字符串作爲關鍵。下面是從RFC 4627的摘錄 - 爲JavaScript對象符號(JSON)

2.2應用程序/ JSON的媒體類型。對象

對象結構被表示爲圍繞零個或多個名稱/值對(或成員)的一對大括號 。 名稱是 字符串。每個名稱後面都會出現一個冒號,將名稱分隔爲 。一個逗號將一個值與以下的名稱分開。對象內的名稱應該是唯一的。

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

member = string name-separator value

[...]

2.5。字符串

字符串的表示與編程語言系列中使用的約定類似。一個字符串以 引號開頭和結尾。 [...]

string = quotation-mark *char quotation-mark

quotation-mark = %x22 ; "

閱讀全文RFC here

+8

並完成思想,第2.5節說:「一個字符串以引號開頭和結尾。 – rakslice 2013-09-26 01:42:10

11

2.2。對象

對象結構表示爲圍繞零個或多個名稱/值對(或成員)的一對大括號。名稱是一個字符串。

and from 2.5。字符串

一個字符串以引號開頭和結尾。

所以,我要說的是,根據標準:是的,你應該總是引用鍵(雖然有些解析器可能更寬容)

-2

既然你可以把「parent.child」點符號,你不必把父母[「孩子」]這也是有效和有用的,我會說這兩種方式在技術上是可以接受的。解析器都應該以兩種方式完成。如果你的解析器不需要引號,那麼最好不要放它們(節省空間)。把它們稱爲字符串是有道理的,因爲它們就是它們的原因,並且由於方括號給了你使用鍵的值的能力,所以它本質上是不合理的。 JSON中,你可以把...

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

>obj 
Object {someKey: "someValue"} 

沒有問題就好了,如果你需要一個價值的關鍵,沒有報價將無法正常工作,因此,如果沒有,你不能,那麼你不會這樣「你不需要在鍵上引用」。即使說技術上是字符串是正確的。邏輯和用法反駁。在我們的示例中,從任何瀏覽器的控制檯運行obj也不會正式輸出Object {「someKey」:「someValue」}。

相關問題