PHP: Как я могу получить атрибут из массива JSON? - PullRequest
2 голосов
/ 08 июля 2010

У меня есть следующий массив 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, как получить значения geometery->location->lat & lng из моего массива JSON выше?псевдокод):

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

Ответы [ 3 ]

5 голосов
/ 08 июля 2010

Вы используете json_decode, а затем $var->results[0]->geometry->location->lat;.

json_decode дает следующую структуру:

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

Вы используете json_decode.

Например:

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

Получаем доступ к первому элементу массива результатов, затем перемещаемся по геометрии, местоположению,и лат свойства.Вы также можете заставить его использовать ассоциативные массивы, но по умолчанию это объект.

2 голосов
/ 08 июля 2010

Привет,

Я рекомендую прочитать json_decode документацию

  <?php 
     $obj = json_decode($json);
     $lat = $obj->results[0]->geometry->location->lat;
  ?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...