Используя PHP (curl), чтобы извлекать данные из JSON (API Карт Google)

Я довольно новичок в JSON, и я пытаюсь получить широту и долготу геокодированного города из API Карт Google, используя curl. Функция, которую я использую:

function geocode($city){ $cityclean = str_replace (" ", "+", $city); $details_url = "http://maps.googleapis.com/maps/api/geocode/json?address=" . $cityclean . "&sensor=false"; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $details_url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $geoloc = json_decode(curl_exec($ch), true); $step1 = $geoloc['results']; $step2 = $step1['geometry']; $coords = $step2['location']; print $coords['lat']; print $coords['lng']; } 

Цель всего этого – вывести значения lat и lng из массива Results -> Geometry -> Location следующего JSON:

 { "status": "OK", "results": [ { "types": [ "locality", "political" ], "formatted_address": "Westminster, London, UK", "address_components": [ { "long_name": "London", "short_name": "London", "types": [ "locality", "political" ] }, { "long_name": "Westminster", "short_name": "Westminster", "types": [ "administrative_area_level_3", "political" ] }, { "long_name": "Greater London", "short_name": "Greater London", "types": [ "administrative_area_level_2", "political" ] }, { "long_name": "England", "short_name": "England", "types": [ "administrative_area_level_1", "political" ] }, { "long_name": "United Kingdom", "short_name": "GB", "types": [ "country", "political" ] } ], "geometry": { "location": { "lat": 51.5001524, "lng": -0.1262362 }, "location_type": "APPROXIMATE", "viewport": { "southwest": { "lat": 51.3493528, "lng": -0.3783580 }, "northeast": { "lat": 51.7040647, "lng": 0.1502295 } }, "bounds": { "southwest": { "lat": 51.3493528, "lng": -0.3783580 }, "northeast": { "lat": 51.7040647, "lng": 0.1502295 } } } } ] } 

Однако он ничего не печатает. Я знаю, что функция успешно извлекает JSON из Google и выводит ее на мой сервер, так как я сделал заявление на печать для значения «status», и он вернул «OK». Кажется, проблема заключается в том, что я пытаюсь глубже погрузиться в JSON.

Извините, если это простая проблема, но, как я уже сказал, я новичок в этом, и теперь это сводит меня с ума.

Большое спасибо! 🙂

    Related of "Используя PHP (curl), чтобы извлекать данные из JSON (API Карт Google)"

    Обратите внимание, что, по-видимому, results содержат массив (содержащий здесь только один элемент) результатов; и geometry – это один элемент внутри одного результата.

    Здесь вы можете видеть, что содержимое результатов ограничено символом [] что указывает на его массив.

    Итак, вы должны сначала получить первый результат: $geoloc['results'][0]
    Внутри вас будет геометрия: $geoloc['results'][0]['geometry']

    Это позволит вам получить широту и долготу:

     var_dump($geoloc['results'][0]['geometry']['location']['lat']); var_dump($geoloc['results'][0]['geometry']['location']['lng']); 

    Я полагаю, что в зависимости от адреса, который вы искали, у вас иногда будет несколько элементов в массиве results .

    Вам просто нужно это:

     $fullurl = "http://maps.googleapis.com/maps/api/geocode/json?address=1600+Amphitheatre+Parkway,+Mountain+View,+CA&sensor=true"; $string .= file_get_contents($fullurl); // get json content $json_a = json_decode($string, true); //json decoder echo $json_a['results'][0]['geometry']['location']['lat']; // get lat for json echo $json_a['results'][0]['geometry']['location']['lng']; // get ing for json