解析包含带有前导的整数或浮点数的JSON Payload时 零作为未使用双引号转义的值, json_decode()返回false。
甚至认为领先的零(大多数时候)无关紧要 整数,该函数应该至少修剪零并且不会失败 整个解码过程。 JSON从一些Java JSON返回 生成器带有包含前导零的整数而不是转义 用双引号。
<?php
$payload = <<<payload
{
"test" : 06
}
payload;
if(!$obj = json_decode($payload)) die("Problems on JSON Parsing the json_decode() function has returned false");
print_r($obj);
stdClass Object ( [test] => 6 )
Problems on JSON Parsing the json_decode() function has returned false
这不是解释here的JSON。我无法真正控制用户发送给我的内容,也无法告诉他们如何具体修剪前导零。
如何在将有效负载送入json_decode之前修剪零?
答案 0 :(得分:1)
您似乎陷入了支持糟糕用户/客户端软件的不幸位置。
尝试使用此正则表达式替换。如果数据有效负载很大,您可能需要调整一些pcre limits
$sanitisedJson = preg_replace('/(?<=:)\s*0+(?=[1-9])/', '', $payload);