PHP - JSON_ENCODE转换为字符串的数字。怎么解决?

时间:2016-06-07 02:47:17

标签: php json

我有以下变量和谷歌地图的一些坐标:

$coordinates = '(22.2819939, 114.15444100000002)';

为了将它们分开,我做了以下几点:

$coor = explode(',',str_replace(array('(',')'),'',$coordinates));

现在我需要以下列格式将此坐标发送到API:

$message = array("location"=>array($coor[1],$coor[0]));

我必须在json中发送它,所以我对数组进行编码,但我得到的是坐标作为字符串而不是数字:

$toSend = json_encode($message);
result-> {"location":["114.15444100000002","22.2819939"]}

如何避免json将坐标作为字符串并将其作为数字?

我需要这个结果:

{"location":[114.15444100000002,22.2819939]}

4 个答案:

答案 0 :(得分:3)

您需要将它们从string转换为float。所以我们只需使用浮点转换

映射数组
$coor = array_map('floatval', $coor);

答案 1 :(得分:1)

请参阅JSON Predefined Constants并使用JSON_NUMERIC_CHECK选项(但您会失去一些精确度):

$toSend = json_encode($message, JSON_NUMERIC_CHECK);
  

JSON_NUMERIC_CHECK(整数)

     

将数字字符串编码为数字。自PHP 5.3.3起可用。

答案 2 :(得分:0)

您可以将字符串转换为数字

$number = (float) "114.15444100000002";

答案 3 :(得分:0)

您可以利用number_format()来实现目标。请参阅以下示例:

$num_str = "114.15444100000002";
$str2float = (float)$num_str;
echo 'Cast to Float: ' . $str2float . PHP_EOL;

$num_format = number_format($num_str, 14);
echo 'With number_format(): ' . $num_format . PHP_EOL;

结果将是:

Cast to Float: 114.154441
With number_format(): 114.15444100000002

经过验证的number_format()适用于您的情况。

P.S。你应该使用这个函数 解析JSON之后。您应该将值保留在字符串中,以防止在编码和解码过程中丢失精度。

P.S。正如@jszobody所提到的,如果值确实是坐标,那么精度绝不应超过6位小数。