如果我在这样的数组上使用json_encode():
return json_encode(array( 'foo' => 'bar'));
回报是:
{'foo' : 'bar'}
密钥以文字形式传递,这使我的脚本绊倒。我真正需要的是:
{ foo : 'bar' }
json_encode是否会这样做,还是我必须用一些丑陋的正则表达式来删除引号?
答案 0 :(得分:14)
当我测试这段代码时:
echo json_encode(array( 'foo' => 'bar'));
die;
我明白了:
{"foo":"bar"}
哪个是有效的JSON。
(请注意,这些是双引号,而不是您发布的简单引号)
你要求的输出:
{ foo : 'bar' }
是有效的Javascript,但无效JSON - 因此json_encode
不会返回该内容。
有关JSON格式的规范,请参阅json.org - 这是Javascript的子集,而不是Javascript本身。
你应该调整你的代码,而不是“用一些丑陋的正则表达式来剥离引号”,所以它接受有效的JSON:在我看来,这样做更好。
答案 1 :(得分:2)
不,json_encode
不会为你做这件事。 json specification具体要求键是引用字符串。这样做是为了确保作为javascript保留字的密钥不会破坏数据对象。
答案 2 :(得分:2)
如果您想将 JSON 转换为打印 javascript 对象(这就是我的情况),您可以使用如下丑陋的正则表达式:
$myJsonString = preg_replace('/"([^"]+)"\s*:\s*/', '$1:', $myJsonString);
来源:https://hdtuto.com/article/php-how-to-remove-double-quotes-from-json-array-keys
答案 3 :(得分:0)
如何绊倒你的剧本?
根据JSON specification,关键名称假设为字符串。您发布的第二个片段无效JSON。
答案 4 :(得分:0)
谢谢大家。关于JSON规范,我不知道。问题实际上是我的脚本,因为我没有将$ .ajax()函数的数据类型设置为“json”
我今天学到了什么 - JSON和Javascript不是一回事!