[英]Remove double-quotes from a json_encoded string on the keys
我有一个json_encoded数组,这很好。
我需要在函数调用返回json字符串的所有键上去除双引号。
我将如何做到这一点并成功返回?
谢谢!
我道歉,这里是json代码的片段:
{"start_date":"2011-01-01 09:00","end_date":"2011-01-01 10:00","text":"test"}
只是添加更多信息:
我将通过AJAX请求检索JSON,因此如果它更容易,我对如何在javascript端执行此操作持开放态度。
按照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;
这肯定适用于上面的字符串,虽然可能有一些我没有想到的边缘情况,这不起作用。 这是否适合您的目的取决于字符串的格式和它包含的元素/值的静态程度。
TL; DR:缺少引号是Chrome显示它是JSON对象而不是字符串的方式。 确保你有Header('Content-Type:application / json; charset = UTF8'); 在PHP的AJAX响应中解决了真正的问题。
详细信息:想要解决此问题的一个常见原因是在调试返回的AJAX数据的处理时发现了这种差异。
就我而言,我使用Chrome的调试工具看到了不同之处。 连接到旧系统后,Chrome成功后显示根据调试器,响应中的键周围没有显示引号。 这允许在不使用JSON.parse()调用的情况下立即将对象视为对象。 调试我的新AJAX目标,响应中显示引号,变量是字符串而不是对象。
当我在外部测试AJAX响应时,我终于意识到真正的问题,看到遗留系统实际上DID在键周围有引号。 这不是Chrome开发工具所展示的内容。 唯一的区别是遗留系统上有一个标题指定了内容类型。 我将此添加到新的(WordPress)系统,并且调用现在与原始脚本完全兼容,并且success函数可以将响应作为对象处理,而无需任何解析。 现在我可以在旧系统和新系统之间切换,除了目标URL之外没有任何更改。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.