PHP:如何从JSON数组中获取属性?

时间:2010-07-08 00:12:40

标签: php json

我有以下JSON数组:

<?php    
$json = {
  "status": "OK",
  "results": [ {
    "types": [ "street_address" ],
    "formatted_address": "5721 N Northcott Ave, Chicago, IL 60631, USA",
    "address_components": [ {
      "long_name": "5721",
      "short_name": "5721",
      "types": [ "street_number" ]
    }, {
      "long_name": "Illinois",
      "short_name": "IL",
      "types": [ "administrative_area_level_1", "political" ]
    }, {
      "long_name": "60631",
      "short_name": "60631",
      "types": [ "postal_code" ]
    } ],
    "geometry": {
      "location": {
        "lat": 41.9858860,
        "lng": -87.7907460
      },
      "location_type": "ROOFTOP",
      "viewport": {
        "southwest": {
          "lat": 41.9827384,
          "lng": -87.7938936
        },
        "northeast": {
          "lat": 41.9890336,
          "lng": -87.7875984
        }
      }
    }
  } ]
};
?>

使用PHP,如何从上面的JSON数组中获取geometery->location->lat&amp; lng值?

例如(伪代码):

<?php
$lat = $json['geometry']['location']['lat'];  // 41.9858860
$lng = $json['geometry']['location']['lng'];  // -87.7907460
?>

3 个答案:

答案 0 :(得分:5)

您使用json_decode,然后使用$var->results[0]->geometry->location->lat;

json_decode产生以下结构:

object(stdClass)[1]
  public 'status' => string 'OK' (length=2)
  public 'results' => 
    array
      0 => 
        object(stdClass)[2]
          public 'types' => 
            array
              0 => string 'street_address' (length=14)
          public 'formatted_address' => string '5721 N Northcott Ave, Chicago, IL 60631, USA' (length=44)
          public 'address_components' => 
            array
              0 => 
                object(stdClass)[3]
                  public 'long_name' => string '5721' (length=4)
                  public 'short_name' => string '5721' (length=4)
                  public 'types' => 
                    array
                      0 => string 'street_number' (length=13)
              1 => 
                object(stdClass)[4]
                  public 'long_name' => string 'Illinois' (length=8)
                  public 'short_name' => string 'IL' (length=2)
                  public 'types' => 
                    array
                      0 => string 'administrative_area_level_1' (length=27)
                      1 => string 'political' (length=9)
              2 => 
                object(stdClass)[5]
                  public 'long_name' => string '60631' (length=5)
                  public 'short_name' => string '60631' (length=5)
                  public 'types' => 
                    array
                      0 => string 'postal_code' (length=11)
          public 'geometry' => 
            object(stdClass)[6]
              public 'location' => 
                object(stdClass)[7]
                  public 'lat' => float 41.985886
                  public 'lng' => float -87.790746
              public 'location_type' => string 'ROOFTOP' (length=7)
              public 'viewport' => 
                object(stdClass)[8]
                  public 'southwest' => 
                    object(stdClass)[9]
                      public 'lat' => float 41.9827384
                      public 'lng' => float -87.7938936
                  public 'northeast' => 
                    object(stdClass)[10]
                      public 'lat' => float 41.9890336
                      public 'lng' => float -87.7875984

答案 1 :(得分:3)

您使用json_decode

E.g:

$json_obj = json_decode($json);
echo $json_obj->results[0]->geometry->location->lat;

我们访问结果数组的第一个元素,然后浏览几何,位置和纬度属性。您也可以使用关联数组,但默认为对象。

答案 2 :(得分:2)

问候,

我建议您阅读json_decode文档

  <?php 
     $obj = json_decode($json);
     $lat = $obj->results[0]->geometry->location->lat;
  ?>