无意中发现php的json_decode有bug

一,什么是json

json是一种数据结构,易于人阅读和编写,同时也易于机器解析和生成。

json建构两种结构:

1,“名称/值”成对的集合,不同的语言中,它被理解为对象(object),纪录(record),结构(struct),字典(dictionary),哈希表(hash table),有键列表(keyed list),或者关联数组 (associative array)。
2,值的有序列表(An ordered list of values)。在大部分语言中,它被理解为数组(array)。

json具有以下这些形式:

对象是一个无序的“‘名称/值’对”集合。一个对象以“{”(左括号)开始,“}”(右括号)结束。每个“名称”后跟一个“:”(冒号);“‘名称 /值’ 对”之间使用“,”(逗号)分隔

二,我遇到的问题

看下面的例子:

查看复制打印?

  1. <?php
  2. $string = ‘{"skus" : [
  3. {
  4. "SHADENAME" : null,
  5. "HEX_VALUE_STRING" : "",
  6. "SKU_BASE_ID" : 5912,
  7. "pricePlusTax" : 8400,
  8. "PRODUCT_SIZE" : "220g",
  9. "PRICE" : 8000,
  10. "SKU_ID" : "SKU5912",
  11. "INVENTORY_STATUS" : 2,
  12. "PRODUCT_CODE" : 016500
  13. }
  14. ],
  15. "shaded" : 0,
  16. "PROD_CAT_IMAGE_NAME" : 0165,
  17. "SKINTYPE_DESC" : "",
  18. "PRODUCT_ID" : "PROD2158"
  19. }
  20. ‘;
  21. //下面的正则是把0615这样数据,转换成"0615"
  22. $pattern = "/:(\s*)0(\d+)/ui";
  23. $replacement = ‘:\\1"0\\2"‘;
  24. $string = preg_replace($pattern, $replacement, $string);
  25. $result = json_decode($string, true);
  26. print_r($result);
  27. $string = json_encode($result);
  28. echo $string;
  29. ?>

操作和分析:

1,如果我把正则的东西拿掉的话,print_r($result);根本显示不了任何东西,问题就出在016500这样的数据上,他搞不清楚,这样的数据到底是字符串类型,还是数值类型。加上双引号就好了。

2,我把数组又重新$string = json_encode($result);并把json字符串打印出来,发现在json_encode会把016500加上双引号,由此可以断定,php代码中的那段json字符串是手动生成的。

3,即使像016500这样的数据没有加上双引号,我想json_decode也可以做出准确的判断,因为这个逻辑不复杂,所以我想json_decode是不是应当改进一下,还有我用php版本是5.2.3,不知道最新的版本有没有修正这个bug

参考:http://blog.51yip.com/php/934.html

时间: 2024-10-10 10:37:55

无意中发现php的json_decode有bug的相关文章

无意中发现了谷歌、腾讯、高德地图纠偏算法

大家知道,天朝的地图都是加偏的,也就是GPS设备接收到的坐标和电子地图坐标是不一样的,有一定的偏移,如果直接把GPS坐标显示到电子地图上,有几百米的误差,必须把GPS坐标加上一定的偏移再显示到电子地图上,才和实际相符,理论上,每种地图偏移量不一样的,且都不是线性的,供应商提供在线的接口,把GPS坐标转换成地图坐标,但算法是保密的,我们可以自己创建纠偏库(参见百度谷歌等地图纠偏库),但部分地方不使用数据库,也不适合网上调用,最合适的办法就是通过算法直接计算,我在网上无意看到了用java写的谷歌地图

无意中发现一个很好的资源站

今天上网无意中发现一个很好的图片资源站所有收藏起来,http://www.193meinv.com/    原文地址:https://www.cnblogs.com/heikeboys/p/9735961.html

无意中发现Markdown,最终解放了我

文件夹 概述 换行 删除线 链接自己主动识别 表格 代码块高亮 定义列表 脚注 自己主动生成文件夹 參考资料 正文 概述 大部分情况下,Markdown的基本的语法已够我们使用,比方随性记录点东西.非专业的分析文章等.一般仅仅用到标题.区块引用.强调.列表这种基本元素.但若要写专业性比較强的分析文章或技术性文章,这些基本的语法就不够用了.由于我们常常会用到表格.脚注.想要自己主动生成文章文件夹等,若是涉及代码的技术文章.我们还希望代码支持高亮以提升阅读体验. 这就须要用到Markdown的扩展语

PeopleRank从社交网络中发现个体价值

阅读导读: 1.什么是PeopleRank? 2.PeopleRank和PageRank有什么区别? 3.PR分析微博数据时,如何对微博单个账号评分? 4.R语言如何递归计算矩阵特征值? 5.如何计算粉丝的关注度? 1. PeopleRank和PageRank PageRank让Google成为搜索领域的No.1,也是当今最有影响力的互联网公司之一,用技术创新改变人们的生活.PageRank主要用于网页评分计算,把互联网上的所有网页都进行打分,给网页价值的体现. 自2012以来,中国开始进入社交

谷歌高管无意中透露Google Glass未获得成功的原因

Google X高管Astro Teller在接受媒体采访时无意中透露了这款设备没有取得预期成绩的原因 最终我们发现,在他们生活的世界里,数字生活和即时物理生活根本无法融为一体. Teller提出的这个观点相当正确,可穿戴设备看不见才让人心动.然而,我们都知道,Google Glass是一款一下子就能让人们发现的产品,它就那样招摇地架在消费者的脸上.

C语言中史上最愚蠢的Bug

C语言中史上最愚蠢的Bug 本文来自“The most stupid C bug ever”,很有意思,分享给大家.我相信这样的bug,就算你是高手你也会犯的.你来看看作者犯的这个Bug吧.. 首先,作者想用一段程序来创建一个文件,如果有文件名的话,就创建真正的文件,如果没有的话,就调用?tmpfile()?创建临时文件.他这段程序就是HTTP下载的C程序.code==200就是HTTP的返回码. 1 2 3 4 else if (code == 200) {     // Downloadin

.net 4 安装未成功,无意中的解决办法!

公司 电脑是chost的系统,由于使用时间过长,重装纯净版系统的话,代价太大,故网上寻求各种解决办法! 安装.net 4 总是失败,查看百度,各种: WIN7系统哈哈跟我的问题一样,我的刚才解决了:1.开始->运行->net stop WuAuServ2.开始->运行->%windir%3.将文件夹SoftwareDistribution重命名为SDold4.开始->运行->net start WuAuServ之后再重新装.net4就能装了.我的也是开始装不了.net4

应用服务器中对JDK的epoll空转bug的处理

原文链接:应用服务器中对JDK的epoll空转bug的处理 前面讲到了epoll的一些机制,与select和poll等传统古老的IO多路复用机制的一些区别,这些区别实质可以总结为一句话, 就是epoll将重要的基于事件的fd集合放在了内核中来完成,因为内核是高效的,所以很多关于fd事件监听集合的操作也是高效的, 不方便的就是,因为在内核中,所以我们需要通过系统调用来调用关于fd操作集合,而不是直接自己攒一个. 如果在linux中,epoll在JDK6中还需要配置,在后续的版本中为JDK的NIO提

RDP 协议组件 X.224 在协议流中发现一个错误并且中断了客户端连接

如果你的服务器有如下错误: “RDP 协议组件 X.224 在协议流中发现一个错误并且中断了客户端连接.” 可能的有2种: 1:你试试能否能继续远程登陆,有可能你的远程登陆组件出现问题. 2:有人攻击你,使用暴力破解的方法登陆你的系统,导致系统拒绝服务. 一句话注意防贼!! 解决方法: 设置组策略=====>管理摸板=====>wndows组件====>终端服务!! 新的补充(比较狠的解决方法,呵呵.): 事件类型: 错误 事件来源: TermDD 描述: RDP 的 "DAT