【问题标题】:json_encode remove quotes from keys?json_encode 从键中删除引号?
【发布时间】:2010-02-03 17:32:08
【问题描述】:

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

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

返回是:

{'foo' : 'bar'}

密钥作为文字传递,这使我的脚本出错。我真正需要的是:

{ foo : 'bar' }

json_encode 是这样做的,还是我必须用一些丑陋的正则表达式自己去掉引号?

【问题讨论】:

  • 您的第二个示例不是有效的 JSON。键必须是带引号的字符串。

标签: php json


【解决方案1】:

当我测试这部分代码时:

echo json_encode(array( 'foo' => 'bar'));
die;

我明白了:

{"foo":"bar"}

哪个是有效的 JSON。

(请注意,这些是双引号,而不是您发布的简单引号)


您要求的输出:

{ foo : 'bar' }

是有效的 Javascript,但 不是有效的 JSON -- 所以json_encode 不会返回。

请参阅json.org 了解 JSON 格式的规范——它是 Javascript 的子集,而不是 Javascript 本身。


而不是“用一些丑陋的正则表达式自己去掉引号”,你应该调整你的代码,所以它接受有效的 JSON:在我看来,这样更好。

【讨论】:

    【解决方案2】:

    不,json_encode 不会为您执行此操作。 json specification 特别要求键是带引号的字符串。这样做是为了确保作为 javascript 保留字的键不会破坏数据对象。

    【讨论】:

      【解决方案3】:

      如果你想将你的 JSON 转换为打印一个 javascript 对象(这是我的情况),你可以像这样使用丑陋的正则表达式:

      $myJsonString = preg_replace('/"([^"]+)"\s*:\s*/', '$1:', $myJsonString);
      

      来源:https://hdtuto.com/article/php-how-to-remove-double-quotes-from-json-array-keys

      【讨论】:

      • 不幸的是,它不仅仅是 javascript - Neo4j 也需要它!
      【解决方案4】:

      你的脚本怎么了?

      根据JSON specification,键名应该是字符串。您发布的第二个 sn-p 不是有效的 JSON。

      【讨论】:

        【解决方案5】:

        谢谢大家。我不知道 JSON 规范。问题实际上出在我的脚本上,因为我没有将 $.ajax() 函数的数据类型设置为“json”

        我今天学到的——JSON 和 Javascript 不是一回事!

        【讨论】:

          猜你喜欢
          • 2014-02-17
          • 1970-01-01
          • 2019-02-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-02-14
          • 1970-01-01
          • 2021-05-04
          相关资源
          最近更新 更多