json_decode是圆形浮动,我该如何防止它?

时间:2015-07-09 14:24:43

标签: php json decode

我有一个相当大的json文件,其坐标格式如下

"[[3.2,1],[4.8,2]]"

代表(3.2,1)和(4.8,2)

我正在使用这些coördinates生成D3地理地图,但是当php将此信息建模为geoJSONobject时,我遇到以下错误:

我需要将坐标转换为我使用json_decode的数组。但是:

json_decode("[[3.2,1],[4.8,2]]")

返回

Array
(
[0] => Array
    (
        [0] => 3
        [1] => 1
    )
[1] => Array
    (
        [0] => 4
        [1] => 2
    )
)

我丢失小数。我该如何防止这种情况?

编辑:

{"type": "FeatureCollection",
 "features": [{
        "type": "Feature",
        "geometry": {
            "type": "Polygon",
            "coordinates": "[[[8.7, 11], [8.89, 12.13],[9.27, 12.13], [9.9, 12], [9.7, 10.8], [8.7, 11]]]"
        },
        "properties": {
            "name": "04",
            "count": "25"
        }
    }]
}

这是我作为输出得到的数据的一个例子。 (它应该代表房间的地图,根据其用途获得密度颜色)

我可以使用jQuery.parseJSON(data)解析此问题,但运行以下D3代码会产生最奇怪的错误:

val(svgname).append("g")
    .selectAll("path")
    .data(geoJSONobject.features)
    .enter().append("path")
    .attr("d", path)
    ...

error 我认为这是因为坐标数组周围的引号。

编辑(2) - 实际解决方案

我接受的解决方案是一种解决方法,但真正的问题是本地化的php-settings。使用:

echo json_encode($dataset, JSON_NUMERIC_CHECK);

在php文件中,所有问题都得到了解决。虽然我会更新这个问题,因为它仍在被查看(如果有人会解决这个问题)

2 个答案:

答案 0 :(得分:8)

我遇到了同样的问题。我使用followin regex解决了它

解决方案1 ​​

$yourJsonVariable = preg_replace('/:\s*(\-?\d+(\.\d+)?([e|E][\-|\+]\d+)?)/', ': "$1"', $yourJsonVariable);

将其转换为数组

$array = json_decode($yourJsonVariable, true);

致谢 SO LINK

解决方案2

您可以设置ini_set('precision',1);

解决方案3

$decoded = json_decode($encoded, true, null, JSON_BIGINT_AS_STRING);
  

注意:最后一个解决方案仅适用于 PHP> 5.4

您可能需要查看 Blog

答案 1 :(得分:0)

只需将值包装在引号中:json_decode('[["3.2","1"],["4.8","2"]]');