2014-04-26 12 views
1

Я работаю с API из подземной погоды. Я пытаюсь добавить некоторые значения в свой сайт на localhost. Я включаю много значений без проблем. Как:Easy-Json и PHP-декодирование

Температура: 30 ° F

Ветер: Быстрый

Вот JSON из этих значений:

enter image description here

"current_observation": { 
     "image": { 
     "url":"http://icons-ak.wxug.com/graphics/wu2/logo_130x80.png", 
     "title":"Weather Underground", 
     "link":"http://www.wunderground.com" 
     }, 
     "display_location": { 
     "full":"Buenos Aires, Argentina", 
     "city":"Buenos Aires", 
     "state":"", 
     "state_name":"Argentina", 
     "country":"AG", 
     "country_iso3166":"AR", 
     "zip":"00000", 
     "magic":"1", 
     "wmo":"87582", 
     "latitude":"-34.56999969", 
     "longitude":"-58.41999817", 
     "elevation":"6.00000000" 
     }, 
     "observation_location": { 
     "full":"Palermo, Buenos Aires, Ciudad Autónoma de Buenos Aires", 
     "city":"Palermo, Buenos Aires", 
     "state":"Ciudad Autónoma de Buenos Aires", 
     "country":"Argentina", 
     "country_iso3166":"AR", 
     "latitude":"-34.595318", 
     "longitude":"-58.419781", 
     "elevation":"124 ft" 
     }, 
     "estimated": { 
     }, 
     "station_id":"IBUENOSA157", 
     "observation_time":"Last Updated on April 26, 7:52 PM ART", 
     "observation_time_rfc822":"Sat, 26 Apr 2014 19:52:51 -0300", 
     "observation_epoch":"1398552771", 
     "local_time_rfc822":"Sat, 26 Apr 2014 19:52:52 -0300", 
     "local_epoch":"1398552772", 
     "local_tz_short":"ART", 
     "local_tz_long":"America/Buenos_Aires", 
     "local_tz_offset":"-0300", 
     "weather":"Clear", 
     "temperature_string":"65.8 F (18.8 C)", 
     "temp_f":65.8, 
     "temp_c":18.8, 
     "relative_humidity":"63%", 

и в индексе php file:

<?php 
$json_string = file_get_contents("http://api.wunderground.com/api/f84c5a4cd54b3216/geolookup/alerts/astronomy/almanac/conditions/forecast/hourly/q/autoip.json"); 
$parsed_json = json_decode($json_string); 
$temp_c = $parsed_json->{'current_observation'}->{'temp_c'}; 
echo "{$'temp_c'}; 

Это отображает температуру. Температура в коде json находится в: Current_observation, а затем значение temp_c.

Проблема в том, что я хочу отразить прогноз, а прогноз находится в другом месте, чем temp_c.

Например. Я хочу повторить текущие условия, то есть здесь:

enter image description here

Проблема заключается в том, что находится в:

{'forecast'}->{'simpleforecast'}->{'forecastday'}, а затем есть ноль для текущего дня, 1 для следующего день, 2 на следующий день и 3 на следующий день.

Когда я пытаюсь сделать это в PHP:

{'forecast'}->{'simpleforecast'}->{'forecastday'}->{'0'}->{'conditions'}; 

Он не показывает ничего. Как я могу перейти в значение json, когда в массиве есть 0?

PD: для 0, есть одно условие, для 1 (то есть на следующий день) есть другое условие, и тому подобное в другой день. Благодаря

+1

Итак, как вы хранить этот прогноз данные? Это еще переменная? Без кода «Это ничего не показывает» не очень полезно. – esqew

+0

проблема в том, что я не могу получить данные. Например, я делаю: $ прогнозcondition = $ parsed_json -> {'прогноз'} -> {'simpleforecast'} -> {'forecastday'} -> {'0'} -> {'conditions'}; и ничего – user254908

+0

из кода, который вы только что указали в своем комментарии, мне кажется, что вы используете одну и ту же переменную, и я не могу не думать, что вы пытаетесь получить доступ к тем же данным JSON. Если это, по сути, то же самое, что вы разместили выше в своем вопросе, нет доступа к объекту «simpleforecast». Покажите нам, как вы получаете доступ к ** новой ** информации JSON. – esqew

ответ

1

Вы были очень близки, но {'0'} означает, что объект с ключом 0, в то время как вы действительно хотели, чтобы получить доступ к первому индекса forecastday

var_dump($parsed_json->{'forecast'}->{'simpleforecast'}->{'forecastday'}[0]->conditions); 
+0

СПАСИБО! ЭТО БЫЛО СДЕЛАНО – user254908

2

Для меня это просто отлично работает, я просто проверял свой код, я только изменил его немного:

<?php 
$json_string = file_get_contents("http://api.wunderground.com/api/f84c5a4cd54b3216/geolookup/alerts/astronomy/almanac/conditions/forecast/hourly/q/autoip.json"); 
$parsed_json = json_decode($json_string, true); 

$desired_forecast = $parsed_json['forecast']['simpleforecast']['forecastday'][0]['conditions']; 

echo '<pre>'; 
print_r($desired_forecast); // Thunderstorm 
echo '</pre>'; 

Он доступен.

+1

Я собирался ответить точно так же! То есть добавьте второй параметр 'true' в' json_decode() ', чтобы вы возвращали ассоциативный массив вместо объектов. Затем просто используйте простые квадратные скобки, чтобы получить то, что вам нужно (в том числе '[0]', без кавычек, чтобы получить первый элемент в массиве). –

+0

спасибо! РАБОТАЕТ СОВЕРШЕННО, ПРОБЛЕМА БЫЛА ЗАВЕРШЕНА, ЧТОБЫ УДАЛИТЬ «НА 0. – user254908

Смежные вопросы