PHP json_decode单引号而不是双引号的问题

PHP's json_decode having problems with single but not double quotes

提问人:Andrew G. Johnson 提问时间:2/15/2014 更新时间:3/27/2020 访问量:3648

问:

通过示例最容易解释:

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

关于它为什么要这样做,或者除了做一堆字符串操作之外,我能做些什么来帮助防止问题吗?

PHP 的JSON

评论

0赞 u_mulder 2/15/2014
读取 json.org,使用本机 JSON 编码函数。
1赞 Digital Chris 2/15/2014
您可以使用 jsonlint.comjsonformatter.curiousconcept.com 轻松验证 json
2赞 Marc B 2/15/2014
'不是 JSON 中的有效引号。基本上,要么使用或回家。"

答:

5赞 Sam 2/15/2014 #1

JSON 中的字符串定义为:

""
" chars "

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

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

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

评论

0赞 user3338098 3/10/2015
我会说 json.org 错了...... 是有效的 javascript 并且没有动态功能...'
1赞 user3338098 3/11/2015
实际上是 JSON ⊊ Javascript。请注意,JSON 是“Javascript”对象表示法的首字母缩写。
1赞 Sam 3/11/2015
@user3338098哇,我昨天空白了,谢谢你纠正我。仍然并不意味着 the 是 JSON 中的有效字符串分隔符(我刚刚阅读了我的答案并意识到它没有指定这一点,我会纠正它)。'
0赞 Sam 4/3/2015
@user3338098你不接受Ecma InternationalIETF编写的JSON标准吗?分别表示“字符串是用引号(U+0022)括起来的Unicode码位序列”“字符串以引号开头和结尾”。
0赞 Sam 4/3/2015
哎呀,试着运行,而不是在浏览器的控制台中运行。您将收到意外的 SyntaxError。JSON.parse("{'foo':'bar'}");JSON.parse('{"foo":"bar"}');'
1赞 Amal Murali 2/15/2014 #2

第一个字符串不是有效的 JSON。这就是 json_decode() 返回 .您可以使用在线验证器(如 jsonlint.com)进行验证。NULL

根据 json.org 中的规范(强调我的):

值可以是用双引号括起来的字符串、数字、true 或 false、null、对象或数组。这些结构可以嵌套。

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

0赞 VEDAT AKDOĞAN 3/27/2020 #3
$siteParameters = str_replace('\'','"',$siteParameters);

评论

0赞 Nick 3/28/2020
欢迎来到 SO。如果你包括它如何回答问题的解释,你的答案会更有用。