PHP json_decode将有问题的值转换为字符串而不是浮点数?

时间:2016-09-19 12:37:38

标签: php json parsing

我有一系列我想要导入的JSON数据。我称之为无问题的JSON数据的一个例子是:

[{
  "records": [{
    "timestamp": 1437805800,
    "Import": 1011546
  },{
    "timestamp": 1437805800,
    "Import": 1075864
  },{
    "timestamp": 1437805800,
    "Import": 1132356
  }]
}]

我遇到的问题是有时数据可能是这样的:

[{
  "records": [{
    "timestamp": 1437805800,
    "Import": 1011546e3
  },{
    "timestamp": 1437805800,
    "Import": 1075864e3
  },{
    "timestamp": 1437805800,
    "Import": 1132356e3
  }]
}]

其中101546e3 = 101546x10 ^ 3这就是我遇到json_decode默认行为的问题,因为它会将这些值转换为float并在其中,它将e3转换为000或{{1} }为00000所以对于上面的第一个值,我会得到1011546000,1075864000,1132356000。我不能说这个值已被修改,因为它可能是一个有效值。

如果在JSON数据中可以包含字符串e5,我应该如何从这个JSON数据中检索正确的值(在JSON字符串中运行它之前存在于json_decode中)?

1 个答案:

答案 0 :(得分:2)

您必须将JSON_NUMERIC_CHECK作为json_encode()函数

中的第二个参数传递

例如

$numbers = array('+123123', '-123123', '1.2e3', '0.00001');
var_dump(
 $numbers,
 json_encode($numbers, JSON_NUMERIC_CHECK)
);
echo "Strings containing improperly formatted numbers".PHP_EOL;
$strings = array('+a33123456789', 'a123');

请参阅PHP Doc以获取第二个参数各种选项