json_encode从键中删除引号?

时间:2010-02-03 17:32:08

标签: php json

如果我在这样的数组上使用json_encode():

return json_encode(array( 'foo' => 'bar'));

回报是:

{'foo' : 'bar'}

密钥以文字形式传递,这使我的脚本绊倒。我真正需要的是:

{ foo : 'bar' }

json_encode是否会这样做,还是我必须用一些丑陋的正则表达式来删除引号?

5 个答案:

答案 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不是一回事!