我有一个相当大的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)
...
我认为这是因为坐标数组周围的引号。
我接受的解决方案是一种解决方法,但真正的问题是本地化的php-settings。使用:
echo json_encode($dataset, JSON_NUMERIC_CHECK);
在php文件中,所有问题都得到了解决。虽然我会更新这个问题,因为它仍在被查看(如果有人会解决这个问题)
答案 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"]]');