2

描述:

当解析包含整数或带有前导零的浮点数的 JSON Payload 作为未使用双引号转义的值时,json_decode() 返回 false。

即使认为前导零(大多数时候)与整数无关,该函数至少应该将零修剪掉并且不会使整个解码过程失败。从一些 Java JSON 生成器返回的 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

我的问题:

这不是这里所解释的 JSON 。我无法真正控制用户发送给我的内容,也无法告诉他们具体到修剪前导零。

在将有效负载输入 json_decode 之前如何修剪零?

4

1 回答 1

1

您似乎陷入了支持蹩脚用户/客户端软件的不幸境地。

试试这个正则表达式替换。如果数据负载很大,您可能需要调整一些pcre 限制

$sanitisedJson = preg_replace('/(?<=:)\s*0+(?=[1-9])/', '', $payload);
于 2013-11-13T05:40:55.000 回答