我有一个json_encoded数组,这很好。
我需要在函数调用返回json字符串的所有键上去除双引号。
我将如何做到这一点并成功归还?
谢谢!
我道歉,这是json代码的片段:
{"start_date":"2011-01-01 09:00","end_date":"2011-01-01 10:00","text":"test"}
添加更多信息:
我将通过AJAX请求检索JSON,所以如果它更容易,我愿意接受如何在javascript端执行此操作的想法。
答案 0 :(得分:7)
已编辑
$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之外,无需进行任何更改。