繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM