PHP json_decode有单引号但不是双引号的问题

时间:2014-02-14 20:14:16

标签: php json

通过示例最容易解释:

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表示错误,而第二个表示正常工作。

任何想法为什么它正在做它或我能做些什么来帮助防止除了做一堆字符串操作之外的问题?

3 个答案:

答案 0 :(得分:5)

JSON中的字符串定义为:

""
" chars "

换句话说,JSON字符串需要双引号(不是单引号)。你是如何得到这个JSON的?我们可以看一下在解码之前验证/修复字符串的可能解决方案。

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

  

值可以是双引号或[...]

中的字符串

答案 1 :(得分:1)

第一个字符串无效JSON。这就是json_decode()返回NULL的原因。您可以使用在线验证程序(例如jsonlint.com

)对此进行验证

根据specification in json.org(强调我的):

  

值可以是双引号中的字符串,或数字,或true或false或null,或对象或数组。这些结构可以嵌套。

修复您的JSON。使用本地编码函数,如json_encode(),而不是手工制作(如果你这样做)。这样,您可以确保生成的JSON字符串有效。

答案 2 :(得分:0)

$siteParameters = str_replace('\'','"',$siteParameters);