加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

使用PHP json_decode可能遇到的坑与解决方法

发布时间:2021-03-01 11:12:53 所属栏目:编程 来源:网络整理
导读:媒介 最近在做网站 的时辰用到了json_decode函数,发明白一个题目,此刻总结分享出来供各人参考进修,话不多说了,来一路看看具体的先容吧。 场景: 某项目客户反馈,输出的功效 JSON 中有个要求为工具的数据字段,在某些环境下返回的是 [] 而不是 {};数据

媒介

最近在做网站 的时辰用到了json_decode函数,发明白一个题目,此刻总结分享出来供各人参考进修,话不多说了,来一路看看具体的先容吧。

场景:

某项目客户反馈,输出的功效 JSON 中有个要求为工具的数据字段,在某些环境下返回的是 [] 而不是 {};数据由公司其他部分提供,查察原始数据的时辰,没有发明任何题目;其后由于要插手某些预处理赏罚,在获取到其他部分的 JSON 数据之后举办解码并对某个字段举办处理赏罚;然而,在处理赏罚完之后再次行使 JSON 输出,发明功效已经不是我们想要的了。

原始数据

个中 foo 是我要举办处理赏罚的字段,处理赏罚完成之后再次行使 json_encode($data) 举办 JSON 编码。

编码完成之后的功效却是这样的

空工具编程了空数组,并且我并没有处理赏罚过字段 bar

通过对模仿数据的实测,发明是由于在对 JSON 举办解码的时辰,是这么解的

题目就出在这里,因为 PHP 自身的特征,在 PHP 中 array 是可以代表强范例说话,如 Java 中的 List 和 Map 的。

来看 PHP 中 json_decode() 要领是怎样界说的

来历 http://php.net/manual/zh/function.json-decode.php

当第二个参数 $assoc 为 true 时,返回的范例是 array,以是题目就来了,当 JSON 中空工具 {} 和 [] 空数组,行使这种方法解码出来的功效示意是同等的;即 array();当再次 json_encode() 编码的时辰就呈现了 {} 变 [] 了。

以是正确的做法是在解码 JSON 的时辰 json_decode 不要转达第二个参数;让解码功效是一个工具,然后操纵工具的属性,操纵完成之后再次编码就不会呈现毛病。

这种题目最突出在于强范例说话和弱范例说话的 API 对接上,因为项目标下家是行使 Java 说话,以是导致了 BUG

总结

以上就是这篇文章的所有内容了,但愿本文的内容对各人的进修可能事变能带来必然的辅佐,假若有疑问各人可以留言交换,感谢各人对编程之家的支持。

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读