簡體   English   中英

PHP 的 json_decode 有單引號但不是雙引號的問題

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM