2011-12-30 86 views
94

對於JavaScript對象或JSON字符串,鍵名中是否有禁止使用的字符?還是需要轉義的角色?哪些字符在JSON密鑰名稱中有效/無效?

更具體地說,我想在鍵名中使用「$」,「 - 」和空格。

+0

我認爲部分這個答案與你編碼的方式做。例如,對於ANSI,UTF8允許使用不同的字符。 – invalidsyntax 2011-12-30 04:00:14

+2

你可以使用'obj ['whatever']'符號在JS中使用任何'key'。但是'obj.whatever'版本只能使用普通的字母數字鍵。 – 2011-12-30 04:05:30

+3

@invalidsyntax:根據定義JSON是Unicode。另外,ANSI不是一種編碼,它是一種字符集,所以比較應該是Unicode-vs-ANSI,而不是UTF-8-vs-ANSI。 – 2011-12-30 04:06:14

回答

116

否。任何有效的字符串都是有效的鍵。它甚至可以有"只要你逃避它:

{"The \"meaning\" of life":42} 

有可能是一個機會,你會遇到這樣的裝載值到一些語言,它試圖與對象的字段名稱鍵關聯的困難。但是,我不知道有這種情況。

+0

Thx!任何其他需要轉義的角色?喜歡:或; ? – Christophe 2011-12-30 04:18:51

+8

不是那些。無論在JavaScript中需要轉義,通常都需要使用JSON。儘管如此,最好還是從json.org那裏獲取它的信息。大約需要一分鐘時間才能完整閱讀整個規範。 – 2011-12-30 04:21:01

+0

這不是一個好的回答。哪種角色需要逃脫?哪些角色可以逃脫,但不必逃脫? – DanFromGermany 2015-12-18 12:20:46

40

以下字符必須以JSON數據進行轉義,以避免出現任何問題

'單引號

」報價

\反斜槓

所有的控制字符,如\ n \ t

JSON Parser可以幫助你處理JSON。

編輯: Here's a replacement JSON parser since OP's link is dead

+4

嗨阿倫,單引號不需要逃脫。事實上,轉義它們會導致嚴格的JSON解析器拋出異常。請參閱http://www.json.org的字符串部分當然,您需要在JSON字符串內部(而不是JSON本身)將其轉義。 – 2014-01-04 17:59:02

+3

@AlexKey你完全正確! Arun,你可以通過測試JSON'{「singlequotetest」:「這裏的東西不正確」}與'{「singlequotetest」:[jsonlint.com](http://jsonlint.com/) 「修理這裏什麼是不對的」} – 2014-09-23 10:51:05

+0

@阿倫拉納 - 不用擔心。 – 2014-09-23 12:55:39

5

Unicode代碼點U + D800到U + DFFF必須避免:它們是invalid以Unicode,因爲它們被保留用於UTF-16代理對。一些JSON編碼器/解碼器將用U + FFFD替換它們。見例如how the Go language and its JSON library deals with them

因此,避免將「\ uD800」單獨設置爲「\ uDFFF」(不在代理對中)。

4

值得一提的是,雖然用數字開始鍵是有效的,但可能會導致一些意想不到的問題。

IE:

var testObject = { 
    "1tile": "test value" 
}; 
console.log(testObject.1tile); // fails, invalid syntax 
console.log(testObject["1tile"]; // workaround 
+0

我真的很希望,在2017/18年的微軟,他們對自己造成的所有痛苦表示遺憾。 – monsto 2017-12-08 21:47:38

+0

查看他們的指標ID參數:https://dev.applicationinsights.io/apiexplorer/metrics?appId=DEMO_APP&apiKey=DEMO_KEY&metricId=requests%2Fcount×pan=PT1H --- 15或20個字段的json字段中有多個正斜槓名。雖然Karns解決方案適用於特定的領域,但似乎無法使其適用於1tile的子領域。例如,後面的點返回給我未定義。 – 2017-12-22 03:21:29