php的json_decode有bug?
时间:2010-08-03
来源:互联网
一,什么是json
json是一种数据结构,易于人阅读和编写,同时也易于机器解析和生成。
json建构两种结构:
1,“名称/值”成对的集合,不同的语言中,它被理解为对象(object),纪录(record),结构(struct),字典(dictionary),哈希表(hash table),有键列表(keyed list),或者关联数组 (associative array)。
2,值的有序列表(An ordered list of values)。在大部分语言中,它被理解为数组(array)。
json具有以下这些形式:
对象是一个无序的“‘名称/值’对”集合。一个对象以“{”(左括号)开始,“}”(右括号)结束。每个“名称”后跟一个“:”(冒号);“‘名称 /值’ 对”之间使用“,”(逗号)分隔。
二,我遇到的问题
看下面的例子:
- <?php
- $string = '{"skus" : [
- {
- "SHADENAME" : null,
- "HEX_VALUE_STRING" : "",
- "SKU_BASE_ID" : 5912,
- "pricePlusTax" : 8400,
- "PRODUCT_SIZE" : "220g",
- "PRICE" : 8000,
- "SKU_ID" : "SKU5912",
- "INVENTORY_STATUS" : 2,
- "PRODUCT_CODE" : 016500
- }
- ],
- "shaded" : 0,
- "PROD_CAT_IMAGE_NAME" : 0165,
- "SKINTYPE_DESC" : "",
- "PRODUCT_ID" : "PROD2158"
- }
- ';
-
- //下面的正则是把0615这样数据,转换成"0615"
- $pattern = "/:(\s*)0(\d+)/ui";
- $replacement = ':\\1"0\\2"';
- $string = preg_replace($pattern, $replacement, $string);
-
- $result = json_decode($string, true);
- print_r($result);
-
- $string = json_encode($result);
- echo $string;
- ?>
操作和分析:
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
作者: fymm 发布时间: 2010-08-03
作者: lucky215 发布时间: 2010-08-03
如果是一个数字就不用加引号,小数也行,负数没试。如果有0123这样的东西,json_decode直接不显示,这也太不友好了。
如果不算bug,我觉也可以改进一下。

作者: fymm 发布时间: 2010-08-03
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28