PHP';s json_解码存在单引号而非双引号问题

PHP';s json_解码存在单引号而非双引号问题,php,json,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"]=

通过示例最容易解释:

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的?我们可以在解码前查看验证/修复字符串的可能解决方案

资料来源:和

值可以是双引号中的字符串,也可以是[…]


JSON中的字符串定义为:

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

资料来源:和

值可以是双引号中的字符串,也可以是[…]


第一个字符串不是有效的JSON。这就是为什么返回
NULL
。您可以使用在线验证器(如)验证这一点

根据(矿山)的重点:

值可以是双引号中的字符串,也可以是数字,也可以是真或假或空,也可以是对象或数组。这些结构可以嵌套


修复JSON。使用本机编码功能,如,而不是手工制作(如果您正在这样做)。这样,您就可以确保生成的JSON字符串是有效的。

第一个字符串不是有效的JSON。这就是为什么返回
NULL
。您可以使用在线验证器(如)验证这一点

$siteParameters = str_replace('\'','"',$siteParameters);
根据(矿山)的重点:

值可以是双引号中的字符串,也可以是数字,也可以是真或假或空,也可以是对象或数组。这些结构可以嵌套


修复JSON。使用本机编码功能,如,而不是手工制作(如果您正在这样做)。这样,您可以确保生成的JSON字符串是有效的。

读取,使用本机JSON编码函数。您可以使用或
轻松验证JSON。
不是JSON中的有效引号。使用
或基本上回家。阅读,使用本机json编码函数。您可以轻松验证json使用或
在json中不是有效引用。使用
或基本上回家。我会说json.org是错误的<代码>“是有效的javascript,没有动态特性…实际上是JSON⊊ Javascript。请注意,JSON是“Javascript”对象表示法的首字母缩略词。@user3338098哇,我昨天没讲这个,谢谢你纠正我。但这并不意味着
在JSON中是一个有效的字符串分隔符(我刚刚阅读了我的答案,意识到它没有指定,我会更正)。@user3338098您不接受或编写的JSON标准吗?它们分别表示“字符串是用引号()包装的Unicode代码点序列”和“字符串以引号开头和结尾”。见鬼,试着运行
JSON.parse(“{'foo':'bar')
而不是
JSON.parse('{“foo”:“bar”}')在浏览器的控制台中。您将得到一个意外的
的语法错误。我想说json.org是错误的<代码>“
是有效的javascript,没有动态特性…实际上是JSON⊊ Javascript。请注意,JSON是“Javascript”对象表示法的首字母缩略词。@user3338098哇,我昨天没讲这个,谢谢你纠正我。但这并不意味着
在JSON中是一个有效的字符串分隔符(我刚刚阅读了我的答案,意识到它没有指定,我会更正)。@user3338098您不接受或编写的JSON标准吗?它们分别表示“字符串是用引号()包装的Unicode代码点序列”和“字符串以引号开头和结尾”。见鬼,试着运行
JSON.parse(“{'foo':'bar')
而不是
JSON.parse('{“foo”:“bar”}')在浏览器的控制台中。对于意外的
,您将得到一个语法错误。欢迎使用SO。如果你能解释一下你的答案是如何回答这个问题的,那么你的答案会有用得多。欢迎阅读。如果你能解释一下你的答案是如何回答这个问题的,那么你的答案会有用得多。
$siteParameters = str_replace('\'','"',$siteParameters);