从键上的json_encoded字符串中删除双引号

时间:2012-01-12 15:32:29

标签: php javascript json

我有一个json_encoded数组,这很好。

我需要在函数调用返回json字符串的所有键上去除双引号。

我将如何做到这一点并成功归还?

谢谢!

我道歉,这是json代码的片段:

{"start_date":"2011-01-01 09:00","end_date":"2011-01-01 10:00","text":"test"}

添加更多信息:

我将通过AJAX请求检索JSON,所以如果它更容易,我愿意接受如何在javascript端执行此操作的想法。

2 个答案:

答案 0 :(得分:7)

根据anubhava的评论

已编辑

$str = '{"start_date":"2011-01-01 09:00","end_date":"2011-01-01 10:00","text":"test"}';
$str = preg_replace('/"([^"]+)"\s*:\s*/', '$1:', $str);
echo $str;

这肯定适用于上面的字符串,虽然可能有一些我无法想到的边缘情况,但这不起作用。这是否适合您的目的取决于字符串的格式和它包含的元素/值的静态程度。

答案 1 :(得分:0)

TL; DR:缺少引号是Chrome显示它是JSON对象而不是字符串的方式。确保您具有Header('Content-Type:application / json; charset = UTF8');在PHP的AJAX响应中解决了实际问题。

详细信息: 想要解决此问题的常见原因是在调试返回的AJAX数据的处理过程中发现了这种差异。

就我而言,我看到了使用Chrome调试工具的不同之处。成功连接到旧系统后,Chrome表示调试器显示响应中的键周围没有引号。这允许将对象立即视为对象,而无需使用JSON.parse()调用。在调试新的AJAX目标时,响应中显示了引号,并且变量是字符串而不是对象。
当我在外部测试AJAX响应时看到真正的问题,当我看到旧系统实际上DID在密钥周围加上引号时,我终于意识到了真正的问题。这不是Chrome开发人员工具所显示的。 唯一的区别是,在旧系统上,有一个标头指定内容类型。我将此添加到新的(WordPress)系统中,并且这些调用现在与原始脚本完全兼容,并且成功函数可以将响应作为对象来处理,而无需任何解析。现在,我可以在旧系统和新系统之间切换,除了目标URL之外,无需进行任何更改。