gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 02:20:56 25 4
gpt4 key购买 nike

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

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

当在 php 中使用 json_decode 解码它时,它返回 null。

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

我使用的是 PHP 5.2.10

最佳答案

因为未定义无效JSON 。 JSON 没有 JavaScript 中的 未定义 概念。它确实有 null,这有点相似,但通常的做法(无论好坏)是简单地省略其值为 undefined 的属性。

如果 Dojo 的 toJson 生成这样的无效 JSON,我会感到惊讶。您可以考虑使用 Crockford's JSON.stringify反而。如果 Dojo 的 toJson 确实做到了这一点,我会将其作为错误报告给 Dojo 团队。

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

更新 2:如您所知,ECMAScript 5th edition specification使用浏览器添加支持的 parsestringify 定义一个 JSON 对象。 JSON.stringify 规范的定义表示“未定义的值不会被渲染”(第 15.12.3 节,注释 2)——例如,属性应省略。也许如果您向 Dojo 团队指出这一点,他们会重新考虑 GIGO 对错误报告的响应。另请注意下面 @Felix 的评论:它们省略了函数引用,这些函数引用也无法在 JSON 中有效表示,但对 undefined 应用了不同的规则。

更新 3:Dojo 1.6.1 中仍然存在问题。这是 live test v1.6.0,这是 CDN 上的最新版本。我还测试了 v1.6.1,但它仍然有问题。 (不过,不会发布指向其下载部分的测试页面热链接,那是不礼貌的。)

关于php - 如果字符串包含单词 undefined 作为值,为什么 php 函数 json_decode 会失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6185114/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com