2013-03-12 71 views
24

可以在JSON數字附近加引號嗎?在大多數搜索鏈接中,似乎數字不會「需要」引號。但是,解析器是否同時接受"attr" : 6"attr" : "6"可以引用JSON數字嗎?

如果MyParser有一個方法getInt得到6給出的關鍵數字,應該MyParser.getInt("attr")回報在這兩種情況下,或者在後一種情況下拋出一個異常?

回答

52

JSON,6是數字6。 "6"字符串包含數字6。因此,問題的答案「可以引用json數字嗎?」基本上是「不」,因爲如果你把它們放在引號中,它們就不再是數字了。

但是,解析器是否同時接受「attr」:6和attr:「6」?

第二個例子是無效的,因爲attr必須加引號,例如:

{"attr": "6"} 

...是有效的,並且定義了與字符串"6"稱爲attr屬性的對象,而是:

{"attr": 6} 

...是有效的,並且定義了一個屬性爲的對象與6,最後:

{attr: 6} 

...和

{attr: "6"} 

......都是無效的JSON,因爲屬性名稱必須是雙引號。

如果MyParser有一個方法getInt獲得給定的關鍵數字,應該MyParser.getInt(「ATTR」)在這兩種情況下,包退6扔在後一種情況下例外呢?

這是爲個人提供的解析器,基本上選擇getInt之間嚴格(拋出一個異常,如果你嘗試在"attr": "6")或鬆散的(脅迫"6"6並返回一個)一個設計決策。 JavaScript通常是鬆散的,所以可能有一個爭論是鬆散的;相反,JavaScript鬆散的事實有時會造成麻煩,這可能是嚴格的論點。

3

這將取決於您用來獲取整數的語言,因爲如果編程語言不提供從字符串到int的隱式轉換,則可能會出現問題。

您不應該太擔心,因爲現代編程語言現在可以隱式地將字符串轉換爲數字而無需額外的代碼。你應該考慮到的東西是,使用編程語言時,如JavaScript,當你比較值時,使用========考慮到該值的類型,而==沒有,所以6 === "6"將返回false,而6 == "6"將返回true

回答您的問題,如果您使用的編程語言提供從字符串到int的隱式轉換,它不會引發異常。