如何解决如果字符串包含未定义为值的单词,为什么php函数json_decode失败?
| 我有这个字符串,它是由dojo.toJson()函数生成的:{\"page\":\"accommodation task=viewList\",\"language\":undefined}
在php中使用json_decode对其进行解码时,它将返回null。
我已经弄清楚这是由未定义的值引起的,但是我不确定这是预期的还是错误。上面的字符串不是有效的json吗?为什么PHP不能将undefined转换为null?
我正在使用PHP 5.2.10
解决方法
因为
undefined
是无效的JSON。 JSON没有JavaScript概念“ѭ1”。它确实具有null
,这在某种程度上与之相似,但是通常的情况(无论好坏)是简单地忽略其值为properties1ѭ的属性。
如果Dojo的toJson
生成这样的无效JSON,我感到很惊讶。您可以考虑改用Crockford的JSON.stringify
。如果Dojo的ѭ5确实做到了,我会向Dojo团队报告这是一个错误。
更新:显然有人确实向他们报告了,并且按照“垃圾进,垃圾出”的理论将其关闭为无效。不是我的项目,但这完全不是我处理带有undefined
值的属性的方式……我会忽略它们或引发异常。
更新2:如您所知,ECMAScript 5th Edition规范定义了带有parse
和stringify
的JSON
对象,浏览器正在添加对它的支持。规范中对“ 6”的定义是“未呈现“ 1”的值”(第15.12.3节,注释2)—例如,应省略该属性。也许如果您向Dojo团队指出这一点,他们将重新考虑GIGO对错误报告的回应。还要注意下面的@Felix \的注释:它们忽略了函数引用,这些引用也不能在JSON中有效地表示,但是对undefined
施加了不同的规则。
更新3:在Dojo 1.6.1中仍然存在问题。这是v1.6.0的实时测试,这是CDN上的最新版本。我还测试了v1.6.1,但该版本仍然无法正常运行。 (不过,不打算将测试页热链接发布到其下载部分,这是很不礼貌的。)
, 您可以在服务器端的PHP中将undefined转换为null,从而解决了当前的问题:
<?php
$json = \'{\"page\":\"accommodation task=viewList\",\"language\":undefined,\"example\": \"This is an example of an occurence of undefined that remains\"}\';
$json = preg_replace(
\'~undefined(?=(?:[^\"]*\"[^\"\\\\\\\\]*(?:\\\\\\\\.[^\"\\\\\\\\]*)*\")*[^\"]*$)~\',\'null\',$json
);
var_dump( json_decode( $json ) );
不过,更好的解决方案是确保\ undefined \不会出现在JSON中,因为它确实是无效的。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。