php json decode hash,无意中发现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具有以下这些形式:

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

二,我遇到的问题

看下面的例子:

$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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值