[英]PHP's json_decode having problems with single but not double quotes
通過示例最容易解釋:
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 表示錯誤,而第二個工作正常。
知道為什么要這樣做,或者除了做一堆字符串操作之外,我還能做些什么來幫助防止出現問題?
JSON 中的字符串定義為:
""
" chars "
換句話說,JSON 字符串需要雙引號(不是單引號)。 你是如何得到這個 JSON 的? 我們可以看看在解碼之前驗證/修復字符串的可能解決方案。
來源: http : //www.json.org/和http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-404.pdf
值可以是雙引號中的字符串,或 [...]
第一個字符串不是有效的 JSON。 這就是json_decode()
返回NULL
的原因。 您可以使用在線驗證器(例如jsonlint.com )進行驗證。
根據json.org 中的規范(重點是我的):
值可以是雙引號中的字符串、數字、真假或空值、對象或數組。 這些結構可以嵌套。
修復您的 JSON。 使用像json_encode()
這樣的原生編碼函數而不是手工制作它(如果你這樣做的話)。 這樣,您就可以確定生成的 JSON 字符串是有效的。
$siteParameters = str_replace('\'','"',$siteParameters);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.