Get a JSON value from an array using Laravel

24,744

Solution 1

var_dump(json_decode($response)->results[0]->geometry->location->lat);

Solution 2

Either pass true as the second parameter to json_decode function and use the array notation:

$obj = json_decode($json_string2, true);
foreach ($obj['geometry'] as $key => $value) {
    $lat = $value['location']['lat'];
    $long   = $value['location']['lng'];
}
Share:
24,744
Admin
Author by

Admin

Updated on July 06, 2020

Comments

  • Admin
    Admin almost 4 years

    I am trying to get the latitude and longitude values from a JSON array - $response, returned from Google, from their Geocoding services.

    The JSON array is returned as such (random address):

    {
       "results":[
          {
             "address_components":[
                {
                   "long_name":"57",
                   "short_name":"57",
                   "types":[
                      "street_number"
                   ]
                },
                {
                   "long_name":"Polo Gardens",
                   "short_name":"Polo Gardens",
                   "types":[
                      "route"
                   ]
                },
                {
                   "long_name":"Bucksburn",
                   "short_name":"Bucksburn",
                   "types":[
                      "sublocality_level_1",
                      "sublocality",
                      "political"
                   ]
                },
                {
                   "long_name":"Aberdeen",
                   "short_name":"Aberdeen",
                   "types":[
                      "locality",
                      "political"
                   ]
                },
                {
                   "long_name":"Aberdeen",
                   "short_name":"Aberdeen",
                   "types":[
                      "postal_town"
                   ]
                },
                {
                   "long_name":"Aberdeen City",
                   "short_name":"Aberdeen City",
                   "types":[
                      "administrative_area_level_2",
                      "political"
                   ]
                },
                {
                   "long_name":"United Kingdom",
                   "short_name":"GB",
                   "types":[
                      "country",
                      "political"
                   ]
                },
                {
                   "long_name":"AB21 9JU",
                   "short_name":"AB21 9JU",
                   "types":[
                      "postal_code"
                   ]
                }
             ],
             "formatted_address":"57 Polo Gardens, Aberdeen, Aberdeen City AB21 9JU, UK",
             "geometry":{
                "location":{
                   "lat":57.1912463,
                   "lng":-2.1790257
                },
                "location_type":"ROOFTOP",
                "viewport":{
                   "northeast":{
                      "lat":57.19259528029149,
                      "lng":-2.177676719708498
                   },
                   "southwest":{
                      "lat":57.18989731970849,
                      "lng":-2.180374680291502
                   }
                }
             },
             "partial_match":true,
             "place_id":"ChIJLTex1jQShEgR5UJ2DNc6N9s",
             "types":[
                "street_address"
             ]
          }
       ],
       "status":"OK"
    }
    

    I have tried the following:

    json_decode($response->results->geometry->location->lat)
    

    But it returns 'trying to access the property of a non-object'.

    Any help would be hugely appreciated.