如果值具有前导零,则json_decode返回false

时间:2013-11-13 04:03:42

标签: php json

说明

解析包含带有前导的整数或浮点数的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之前修剪零?

1 个答案:

答案 0 :(得分:1)

您似乎陷入了支持糟糕用户/客户端软件的不幸位置。

尝试使用此正则表达式替换。如果数据有效负载很大,您可能需要调整一些pcre limits

$sanitisedJson = preg_replace('/(?<=:)\s*0+(?=[1-9])/', '', $payload);