Как получить значение расстояния от следующего объекта JSON?
Мне нужно получить значение 361714 из следующего объекта JSON в PHP. JSON получается с помощью Google distance matrix api.
Ссылка : https://maps.googleapis.com/maps/api/distancematrix/json?units=imperial&origins=Washington,DC&destinations=New+York+City,NY&key=AIzaSyDVfbt8uCHfFTehDjDS-z_XfYF1O-lLDAE
{
"destination_addresses" : [ "New York, NY, USA" ],
"origin_addresses" : [ "Washington, DC, USA" ],
"rows" : [
{
"elements" : [
{
"distance" : {
"text" : "225 mi",
"value" : 361714
},
"duration" : {
"text" : "3 hours 49 mins",
"value" : 13767
},
"status" : "OK"
}
]
}
],
"status" : "OK"
Я пробовал это :
for($f = 0; $f<count($address); $f++)
{
$url = "http://maps.googleapis.com/maps/api/distancematrix/json?units=imperial&origins=" . $for_cust_add . "&destinations=" . $for_add[$f] . "&key=AIzaSyDVfbt8uCHfFTehDjDS-z_XfYF1O-lLDAE";
$json = file_get_contents($url);
$details = json_decode($json, true);
$distance = $details['rows']['elements']['distance']['value'];
$distance_array[$f] = $distance;
}
Это дает ошибку: элементы не определены.
4 ответов:
Попробуйте с:
$distance = $details['rows'][0]['elements'][0]['distance']['value'];
$details['rows']['elements']- это массив, и вам нужен его первый элемент, следовательно, добавленный[0]Обновление-полное доказательство концепции для json в вопросе:
<?php $json_file = ' { "destination_addresses" : [ "New York, NY, USA" ], "origin_addresses" : [ "Washington, DC, USA" ], "rows" : [ { "elements" : [ { "distance" : { "text" : "225 mi", "value" : 361714 }, "duration" : { "text" : "3 hours 49 mins", "value" : 13767 }, "status" : "OK" } ] } ] }'; $details = json_decode($json_file, true); $distance = $details['rows'][0]['elements'][0]['distance']['value']; print_r($distance); ?>Приведенный выше код печатает 361714
Элементы и расстояние находятся внутри дополнительного массива, поэтому вы не можете получить к ним доступ, как вы пытаетесь:
$json = '{ "destination_addresses" : [ "New York, NY, USA" ], "origin_addresses" : [ "Washington, DC, USA" ], "rows" : [ { "elements" : [ { "distance" : { "text" : "225 mi", "value" : 361714 }, "duration" : { "text" : "3 hours 49 mins", "value" : 13767 }, "status" : "OK" } ] } ], "status" : "OK" }'; $data = json_decode($json); foreach ($data->rows as $row) { foreach ($row->elements as $element) { var_dump($element->distance->value); } }1-й: декодировать строку json и получить и объект; 2-й: доступ к объекту 1 на 1, сначала к строкам, а затем к элементам внутри строк;
Если вы хотите получить только первую запись, возвращенную запросом, то попробуйте:
$distance = $details['rows'][0]['elements'][0]['distance']['value'];Если вы хотите проверить все элементы:
foreach($row in $details['rows']) foreach($element in $row['elements']) $distance = $element['distance']['value'];В будущем используйте use print_r для отладки; тогда вы можете увидеть, как выглядит фактическая структура, возвращаемая json_decode.
print_r($details);
Используйте json_decode ()
//Enter your code here, enjoy! $json_file = ' { "destination_addresses" : [ "New York, NY, USA" ], "origin_addresses" : [ "Washington, DC, USA" ], "rows" : [ { "elements" : [ { "distance" : { "text" : "225 mi", "value" : 361714 }, "duration" : { "text" : "3 hours 49 mins", "value" : 13767 }, "status" : "OK" } ] } ] }'; // convert the string to a json object $jsonObject = json_decode($json_file); // read the distance object $distance = $jsonObject->rows[0]->elements[0]->distance; print_r($distance); echo 'text= ' . $distance->text . ', value = ' . $distance->value;
Comments