我正在从谷歌地图中提取一些JSON数据,这些数据给了我两个地址之间的精确距离。这工作正常,但是当涉及到使用json_decode时,它给了我一些可怕的数据!这是输出的示例数组:
array(4) {
["destination_addresses"]=>
array(1) {
[0]=>
string(51) "96 Stirling Street, Alva, Clackmannanshire FK12, UK"
}
["origin_addresses"]=>
array(1) {
[0]=>
string(64) "17 Dalgety Road, Edinburgh, Edinburgh, City of Edinburgh EH7, UK"
}
["rows"]=>
array(1) {
[0]=>
array(1) {
["elements"]=>
array(1) {
[0]=>
array(3) {
["distance"]=>
array(2) {
["text"]=>
string(7) "39.3 mi"
["value"]=>
int(63242)
}
["duration"]=>
array(2) {
["text"]=>
string(7) "59 mins"
["value"]=>
int(3555)
}
["status"]=>
string(2) "OK"
}
}
}
}
["status"]=>
string(2) "OK"
}
如您所见,它还将字符串(#)或int(#)放在数组项的开头,并在值周围放置"导致此问题的原因是什么?下面是输出的 JSON。
{
"destination_addresses" : [ "96 Stirling Street, Alva, Clackmannanshire FK12, UK" ],
"origin_addresses" : [ "17 Dalgety Road, Edinburgh, Edinburgh, City of Edinburgh EH7, UK" ],
"rows" : [
{
"elements" : [
{
"distance" : {
"text" : "39.3 mi",
"value" : 63242
},
"duration" : {
"text" : "59 mins",
"value" : 3555
},
"status" : "OK"
}
]
}
],
"status" : "OK"
}
我的 php 代码:
$url = fopen("https://maps.googleapis.com/maps/api/distancematrix/json?origins=".$latitudeFrom.",".$longitudeFrom."&destinations=".$latitudeTo.",".$longitudeTo."&mode=driving&units=imperial", "r");
$result = json_decode(stream_get_contents($url), true);
fclose($url);
var_dump($result['rows'][0]['elements'][0]['distance']['text']);
你得到的是一个对象,而不是一个数组。您需要这样引用它。处理数据时,从var_dump
中看到的数据将不会显示在输出中。这只是出于调试目的,以便您可以看到正在处理的内容。
返回对象的json_decode
$json = json_decode($json);
echo $json->rows[0]->elements[0]->distance->text;
返回数组的json_decode
$json = json_decode($json, true);
echo $json['rows'][0]['elements'][0]['distance']['text'];