2011-01-22 28 views
1

在PHP中,您可以使用json_encode將對象編碼爲json字符串。JSON'正式'支持原生類型的轉換嗎?

$string = json_encode($some_object); 

然而,PHP有如果你在一個字符串json_encode傳遞在不考慮對象(整數,字符串等)數據類型的標準轉換,這將返回一個包含JavaScript語句,可能是一個字符串用於定義字符串。

在不太尷尬的措辭,這

echo json_encode("Hello 
world, please don't " . '"' . "misuse quote's for emphasis " . "or possessive apostrophes' "); 

將輸出這個(一個JavaScript字符串準備)

"Hello \n\tworld, please don't \"misuse quote'sor possessive apostrophes' " 

是JSON的規範這種行爲的一部分?也就是說,JSON是否定義或推薦了一個實現如何處理本地,非對象,數據類型的轉換?甚至有轉換的意見呢?我的閱讀of the RFC留下這個模糊不清,但我在解釋這些事情是廢話。

我問,因爲我對該行爲從未來版本的函數中消失的可能性感興趣。也就是說,如果它在某個規範中被編入規範中,那麼它就不太可能消失,而不是像在開發過程中想要添加的人那樣。

回答

3

JSON根本不關心本地類型。它取決於JSON庫的開發者或JSON如何被轉換爲編程語言可以使用/理解的類型。

1

你說的對啊,RFC在這個問題上還不夠清楚。

一方面,鏈接到您提供它說上推出的第二款RFC上:

JSON可以表示四個基本類型(字符串,數字,布爾值和null)和兩個結構化類型(對象和數組)。

但在當你不斷的段落關於實際JSON語法它說,會談另一方面:

一個JSON文本是一個序列化對象或數組。
JSON文本=對象/數組

因此,基於語法可以說'a string'沒有資格作爲有效的JSON文本。

個人而言,我寧願看到語法「固定」的說法 JSON-text = value從而使任何false/null/true/object/array/number/string成爲有效的JSON文本的。

如果你現在想要嚴格,我會去語法的語義。

我會發送道格拉斯克羅克福德這個問題的鏈接,也許他可以添加一些有用的信息。

+0

呵呵,我敢肯定Doug對他的格式很滿意,但對信息+1,謝謝! – 2011-01-23 08:16:57

相關問題