2014-02-14 98 views
1

最容易通過例子來說明問題:PHP的json_decode具有單而不是雙引號

var_dump(json_decode("[{'a':'b'},{'c':'d'},{'e':'f'}]")); // NULL 
var_dump(json_decode('[{"a":"b"},{"c":"d"},{"e":"f"}]')); // array(3) { [0]=> object(stdClass)#1 (1) { ["a"]=> string(1) "b" } [1]=> object(stdClass)#2 (1) { ["c"]=> string(1) "d" } [2]=> object(stdClass)#3 (1) { ["e"]=> string(1) "f" } } 

正如你可以看到,而第二個工作正常的單引號用來返回NULL意味着錯誤的第一個例子。

任何想法,爲什麼它這樣做,或者我能做些什麼來幫助防止除了做一堆字符串操作之外的問題?

+0

閱讀http://json.org/,使用本機json編碼功能。 –

+1

您可以使用http://jsonlint.com/或http://jsonformatter.curiousconcept.com/ –

+2

輕鬆驗證json'''在JSON中不是有效的引號。使用''''或回家,基本上。 –

回答

5

在JSON的字符串被定義爲:

"" 
" chars " 

換言之,雙引號(不是單)是必要的JSON字符串。你如何得到這個JSON?我們可以在解碼之前查看驗證/修復字符串的可能解決方案。

來源:http://www.json.org/http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-404.pdf

值可以是在雙引號,或[...]

+0

我會說,json.org是錯誤的''''是有效的JavaScript和沒有動態功能... – user3338098

+0

JSON'!='Javascript – Sam

+1

其實JSON⊊Javascript。請注意,JSON是「Javascript」對象表示法的首字母縮寫詞。 – user3338098

1

第一串不是有效的JSON字符串。這就是爲什麼json_decode()返回NULL。您可以使用在線驗證程序(如jsonlint.com)驗證此情況。

按照specification in json.org(重點煤礦):

值可以是在雙引號,或一個數字,或字符串真或假或爲空,或物體或陣列。這些結構可以嵌套。

修復您的JSON。使用像json_encode()這樣的本地編碼功能,而不是手工編制它(如果你這樣做的話)。這樣,您可以確定生成的JSON字符串是有效的。

相關問題