提问人:Andrew G. Johnson 提问时间:2/15/2014 更新时间:3/27/2020 访问量:3648
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,表示错误,而第二个示例工作正常。
关于它为什么要这样做,或者除了做一堆字符串操作之外,我能做些什么来帮助防止问题吗?
答:
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 International或IETF编写的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。如果你包括它如何回答问题的解释,你的答案会更有用。
评论
'
不是 JSON 中的有效引号。基本上,要么使用或回家。"