Получить часть объекта JSON - PullRequest
       21

Получить часть объекта JSON

1 голос
/ 05 августа 2011

Я играю с Google Maps и геокодированием (преобразование адреса в координаты lang / lat). Пока все отлично работает, и я получаю ответ от сервера карт Google с файлом:

<code>$address = urlencode( $address );
$url = "http://maps.google.com/maps/api/geocode/json?address={$address}&sensor=false";
$content = file_get_contents( $url );
echo '<pre>';
    print_r( $content );
echo '
';

Дело в том, что мне не нужна вся эта информация.

Вопросы

A Как получить только часть объекта JSON? ( Пример : мне нужно только 'results'->'address_components'->'type' = 'country';.)

B Можно ли как-то уменьшить содержимое возвращаемого файла (google), так как мне все не нужно?

Update

Мне нужно добавить часть данных в объект json. Таким образом, декодирование и последующее кодирование кажутся потерей энергии и времени (на данный момент). Любые идеи, если бы я был лучше (быстрее) с запросом объекта XML? (Окончательный набор объектов довольно большой. Вот почему я действительно должен заботиться о производительности.)


Пример ответа JSON с сервера карт Google Maps (содержимое файла):

{
   "results" : [
      {
         "address_components" : [
            {
               "long_name" : "28",
               "short_name" : "28",
               "types" : [ "street_number" ]
            },
            {
               "long_name" : "Sellhorner Weg",
               "short_name" : "Sellhorner Weg",
               "types" : [ "route" ]
            },
            {
               "long_name" : "Behringen",
               "short_name" : "Behringen",
               "types" : [ "sublocality", "political" ]
            },
            {
               "long_name" : "Bispingen",
               "short_name" : "Bispingen",
               "types" : [ "locality", "political" ]
            },
            {
               "long_name" : "Soltau-Fallingbostel",
               "short_name" : "Soltau-Fallingbostel",
               "types" : [ "administrative_area_level_2", "political" ]
            },
            {
               "long_name" : "Niedersachsen",
               "short_name" : "NDS",
               "types" : [ "administrative_area_level_1", "political" ]
            },
            {
               "long_name" : "Deutschland",
               "short_name" : "DE",
               "types" : [ "country", "political" ]
            },
            {
               "long_name" : "29646",
               "short_name" : "29646",
               "types" : [ "postal_code" ]
            }
         ],
         "formatted_address" : "Sellhorner Weg 28, 29646 Bispingen, Deutschland",
         "geometry" : {
            "location" : {
               "lat" : 53.118080,
               "lng" : 9.966859999999999
            },
            "location_type" : "ROOFTOP",
            "viewport" : {
               "northeast" : {
                  "lat" : 53.11942898029150,
                  "lng" : 9.96820898029150
               },
               "southwest" : {
                  "lat" : 53.11673101970850,
                  "lng" : 9.965511019708496
               }
            }
         },
         "partial_match" : true,
         "types" : [ "street_address" ]
      }
   ],
   "status" : "OK"
}

1 Ответ

4 голосов
/ 05 августа 2011
$array = json_decode($content, true);
$countries = array_filter($array['results']['address_components'], function ($a) {
    return in_array('country', $a['types']);
});

var_dump($countries);

Дает вам все address_components, которые имеют тип 'country'.Возможно, это будет только один, но может быть больше, чем один.Этот синтаксис требует PHP 5.3+ BTW.

Можно ли каким-то образом уменьшить содержимое возвращаемого файла (google), так как мне все не нужно?

Просто возьмитечасти, расшифрованные $array, вам нужны, а остальные забудьте.Если хотите, json_encode это снова.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...