如果字符串包含单词undefined作为值,为什么php函数json_decode会失败?

jgi*_*oni 2 javascript php dojo json

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

{"page":"accommodation task=viewList","language":undefined}
Run Code Online (Sandbox Code Playgroud)

当用php中的json_decode对其进行解码时,它返回null.

我已经发现这是由未定义的值引起的,但我不确定这是否是预期的,或者它是否是一个bug.上面的字符串是无效的json吗?为什么php不能将undefined转换为null?

我使用的是PHP 5.2.10

T.J*_*der 8

因为JSONundefined无效.JSON没有JavaScript的概念.它确实有,但模糊地相似,但通常的事情(无论好坏)是简单地省略其值为的属性.undefinednullundefined

如果Dojo toJson产生无效的JSON,我会很惊讶.您可以考虑使用CrockfordJSON.stringify代替.如果Dojo toJson真的这样做,我会把它作为一个错误报告给Dojo团队.

更新:显然有人确实向他们报告过,并且他们在"垃圾进入垃圾"理论中将其关闭为无效.不是我的项目,不过这只是完全不是我将如何处理与性undefined价值观......我会忽略它们或抛出异常.

更新2:正如你可能知道,在ECMAScript的第5版规范定义了一个JSON对象,具有parsestringify该浏览器将支持.的规范的定义JSON.stringify说:" undefined值不渲染"(第15.12.3,注2) -例如,财产应该被忽略.或许,如果你指出这一点道场队,他们会重新考虑他们的GIGO响应的错误报告.另请注意@ Felix的评论如下:它们省略了函数引用,它们也无法在JSON中有效表示,但应用了不同的规则undefined.

更新3:在Dojo 1.6.1中仍然存在问题.这是v1.6.0 的实时测试,这是CDN上的最新版本.我也测试了v1.6.1,它仍然在那里打破了.(不会发布测试页面链接到他们的下载部分,但是,这将是粗鲁的.)

  • 这太有趣了.这里似乎有某种双重标准.函数引用也无效,[但在输出中省略](http://jsfiddle.net/UBZ39/).你是对的,同样应该为`undefined`做. (2认同)