如果字符串包含未定义为值的单词,为什么php函数json_decode失败? - php

我有这个字符串,它是由dojo.toJson()函数生成的:

{"page":"accommodation task=viewList","language":undefined}

在php中使用json_decode对其进行解码时,它将返回null。

我已经弄清楚这是由未定义的值引起的,但是我不确定这是预期的还是错误。上面的字符串不是有效的json吗?为什么PHP不能将undefined转换为null?

我正在使用PHP 5.2.10

参考方案

因为undefined无效JSON。 JSON没有undefined的JavaScript概念。它确实具有null,这在某种程度上与之相似,但是通常的情况(不管是好是坏)是简单地忽略值为undefined的属性。

如果Dojo的toJson生成这样的无效JSON,我会感到惊讶。您可以考虑使用Crockford's JSON.stringify代替。如果Dojo的toJson确实在这样做,我会向Dojo团队报告这是一个错误。

更新:显然有人did report it to them,他们根据“垃圾进,垃圾出”的理论将其关闭为无效。不是我的项目,但这完全不是我用undefined值处理属性的方式……我会忽略它们或引发异常。

更新2:您可能知道,ECMAScript 5th edition specification定义了JSON对象,其中parsestringify浏览器正在添加对它们的支持。规范的JSON.stringify定义表示“不呈现undefined值”(第15.12.3节,注释2)-例如,应省略该属性。也许如果您向Dojo团队指出这一点,他们将重新考虑GIGO对错误报告的响应。还要注意@Felix在下面的注释:它们忽略了函数引用,这些引用也不能在JSON中有效地表示,但是对undefined应用了不同的规则。

更新3:在Dojo 1.6.1中仍然存在。这是v1.6.0的live test,这是CDN上的最新版本。我还测试了v1.6.1,它仍然在那儿坏了。 (不过,不打算将测试页热链接发布到其下载部分,这是很不礼貌的。)

PHP json_encode数组到javascript关联数组 - javascript

我有一些从PHP中读取的mysqli列。它正在完美地获取和回显。$results = mysqli_fetch_assoc(mysqli_query($conn, $querystring)); echo json_encode($results); //$results = {"title":"Sea Shells"…

PHP getallheaders替代 - php

我正在尝试从服务器上的apache切换到nginx。唯一的问题是我在PHP脚本中使用的getallheaders()函数,该函数不适用于Nginx。我已经尝试过用户在getallheaders函数上的php站点上提供的注释,但这并不返回所有请求标头。请告诉我如何解决这个问题。我真的想切换到Nginx。 参考方案 您仍然可以使用它,但是您必须像这里一样重新定义…

PHP:将字符串拆分为字母和数字部分的最佳方法 - php

我有几个格式的字符串AA11 AAAAAA1111111 AA1111111 分离字符串的字母和数字部分的最佳方法(最有效)? 参考方案 如果它们都是一系列字母,然后是一系列数字,并且没有非字母数字字符,那么sscanf()可能比regexp更有效$example = 'AAA11111'; list($alpha,$numeric) =…

php-casperjs获取内部文本 - php

我正在为casperjs使用php包装器-https://github.com/alwex/php-casperjs我正在网上自动化一些重复的工作,我需要访问一个项目的innerText,但是我尚不清楚如何从casperjs浏览器访问dom。我认为在js中我会var arr = document.querySelector('label.input…

PHP:检查目录是否为空的最佳和最简便的方法是什么 - php

Improve this question 我有一个包含数百个动态生成文件夹的根目录。随着时间的流逝,在这些目录必须为空的情况下,需要从系统中删除其中一些文件夹。实现这一目标的最佳的最短,最简单和/或最有效的方法是什么? 参考方案 使用glob:if (count(glob("path/*")) === 0 ) { // empty gl…