全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

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

前言

最近在做网站 的时候用到了json_decode函数,发现了一个问题,现在总结分享出来供大家参考学习,话不多说了,来一起看看详细的介绍吧。

场景:

某项目客户反馈,输出的结果 JSON 中有个要求为对象的数据字段,在某些情况下返回的是 [] 而不是 {};数据由公司其他部门提供,查看原始数据的时候,没有发现任何问题;后来因为要加入某些预处理,在获取到其他部门的 JSON 数据之后进行解码并对某个字段进行处理;然而,在处理完之后再次使用 JSON 输出,发现结果已经不是我们想要的了。

原始数据

{
 ...,
 "foo": "",
 "bar": {},
 ...
}

其中 foo 是我要进行处理的字段,处理完成之后再次使用 json_encode($data) 进行 JSON 编码。

编码完成之后的结果却是这样的

{
 ...,
 "foo": "",
 "bar": [],
 ...
}

空对象编程了空数组,而且我并没有处理过字段 bar

通过对模拟数据的实测,发现是因为在对 JSON 进行解码的时候,是这么解的

$data = json_decode($jsonString, true)

问题就出在这里,由于 PHP 自身的特性,在 PHP 中 array 是可以代表强类型语言,如 Java 中的 List 和 Map 的。

来看 PHP 中 json_decode() 方法是如何定义的

mixed json_decode ( string $json [, bool $assoc = false [, int $depth = 512 [, int $options = 0 ]]] )

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

当第二个参数 $assoc 为 true 时,返回的类型是 array,所以问题就来了,当 JSON 中空对象 {} 和 [] 空数组,使用这种方式解码出来的结果表现是一致的;即 array();当再次 json_encode() 编码的时候就出现了 {} 变 [] 了。

所以正确的做法是在解码 JSON 的时候 json_decode 不要传递第二个参数;让解码结果是一个对象,然后操作对象的属性,操作完成之后再次编码就不会出现偏差。

这种问题最突出在于强类型语言和弱类型语言的 API 对接上,由于项目的下家是使用 Java 语言,所以导致了 BUG

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对的支持。


# php  # json  # decode  # 编码  # 失败  # JavaScript字符串转数字的5种方法及遇到的坑  # 基于js粘贴事件paste简单解析以及遇到的坑  # JavaScript代码编写中各种各样的坑和填坑方法  # JavaScript中使用typeof运算符需要注意的几个坑  # Javascript中构造函数要注意的一些坑  # JS大坑之19位数的Number型精度丢失问题详解  # JS面试题大坑之隐式类型转换实例代码  # 对象题目的一个坑 理解Javascript对象  # 弱类型语言javascript开发中的一些坑实例小结【变量、函数、数组、对象、作用域等】  # 第二个  # 的是  # 是一个  # 原始数据  # 我要  # 是在  # 来了  # 是因为  # 有个  # 却是  # 说了  # 不多  # 并对  # 在对  # 一个问题  # 这篇文章  # 谢谢大家  # 出在  # 最突出  # 某项 


相关文章: 标准网站视频模板制作软件,现在有哪个网站的视频编辑素材最齐全的,背景音乐、音效等?  如何在新浪SAE免费搭建个人博客?  网站设计制作企业有哪些,抖音官网主页怎么设置?  python的本地网站制作,如何创建本地站点?  如何挑选最适合建站的高性能VPS主机?  建站10G流量真的够用吗?如何应对访问高峰?  建站之星3.0如何解决常见操作问题?  哪家制作企业网站好,开办像阿里巴巴那样的网络公司和网站要怎么做?  宝塔新建站点报错如何解决?  已有域名能否直接搭建网站?  怎么将XML数据可视化 D3.js加载XML  大连企业网站制作公司,大连2025企业社保缴费网上缴费流程?  如何快速生成ASP一键建站模板并优化安全性?  详解免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)  手机网站制作平台,手机靓号代理商怎么制作属于自己的手机靓号网站?  智能起名网站制作软件有哪些,制作logo的软件?  如何构建满足综合性能需求的优质建站方案?  SAX解析器是什么,它与DOM在处理大型XML文件时有何不同?  宝塔Windows建站如何避免显示默认IIS页面?  长沙做网站要多少钱,长沙国安网络怎么样?  建站之星代理平台如何选择最佳方案?  黑客如何利用漏洞与弱口令入侵网站服务器?  ,交易猫的商品怎么发布到网站上去?  ,网站推广常用方法?  建站之星如何实现五合一智能建站与营销推广?  如何用狗爹虚拟主机快速搭建网站?  代刷网站制作软件,别人代刷火车票靠谱吗?  如何高效生成建站之星成品网站源码?  b2c电商网站制作流程,b2c水平综合的电商平台?  小捣蛋自助建站系统:数据分析与安全设置双核驱动网站优化  定制建站模板如何实现SEO优化与智能系统配置?18字教程  网站制作的软件有哪些,制作微信公众号除了秀米还有哪些比较好用的平台?  php json中文编码为null的解决办法  建站之星如何助力网站排名飙升?揭秘高效技巧  音响网站制作视频教程,隆霸音响官方网站?  Python如何创建带属性的XML节点  家族网站制作贴纸教程视频,用豆子做粘帖画怎么制作?  网站设计制作公司地址,网站建设比较好的公司都有哪些?  建站之星安装失败:服务器环境不兼容?  广州网站制作的公司,现在专门做网站的公司有没有哪几家是比较好的,性价比高,模板也多的?  中山网站推广排名,中山信息港登录入口?  如何用低价快速搭建高质量网站?  javascript中的try catch异常捕获机制用法分析  c# Task.ConfigureAwait(true) 在什么场景下是必须的  定制建站方案优化指南:企业官网开发与建站费用解析  高防服务器租用如何选择配置与防御等级?  金*站制作公司有哪些,金华教育集团官网?  详解jQuery停止动画——stop()方法的使用  网站制作和推广的区别,想自己建立一个网站做推广,有什么快捷方法马上做好一个网站?  如何挑选高效建站主机与优质域名? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。