2013-05-16 4 views
0

У меня есть приложение iOS, настроенное для загрузки и анализа JSON-канала. Он извлекает данные в порядке, но я борюсь за то, как читать определенные вложенные данные JSON в фиде.Доступ к данным канала JSON

Вот корм JSON Я пытаюсь нагрузки: http://api.wunderground.com/api/595007cb79ada1b1/conditions/forecast/q/51.5171,0.1062.json

Часть кормов JSON Я пытаюсь загрузить это:

"forecast":{ 
    "txt_forecast": { 
    "date":"1:00 AM BST", 
    "forecastday": [ 
    { 
    "period":0, 
    "icon":"chancerain", 
    "icon_url":"http://icons-ak.wxug.com/i/c/k/chancerain.gif", 
    "title":"Thursday", 
    "fcttext":"Clear with a chance of rain in the morning, then mostly cloudy with a chance of rain. High of 59F. Winds from the SSE at 5 to 10 mph. Chance of rain 60%.", 
    "fcttext_metric":"Clear with a chance of rain in the morning, then mostly cloudy with a chance of rain. High of 15C. Winds from the SSE at 5 to 15 km/h. Chance of rain 60%.", 
    "pop":"60" 
    } 

Вы видите, что немного называется «периодом »: 0 и в периоде 0 есть« значок »,« название »и т. Д.

Ну, я пытаюсь получить доступ к этим данным, но не могу.

Вот мой код для доступа к определенной части вложенной подачи JSON:

NSError *myError = nil; 
NSDictionary *res = [NSJSONSerialization JSONObjectWithData:responseData options:NSJSONReadingMutableLeaves error:&myError]; 
NSArray *results = [res objectForKey:@"current_observation"]; 
NSArray *cur = [results valueForKey:@"weather"]; 
NSArray *windrep = [results valueForKey:@"wind_string"]; 
NSArray *UVrep = [results valueForKey:@"UV"]; 
NSArray *othertemprep = [results valueForKey:@"temperature_string"]; 
NSString *loc = [[results valueForKey:@"display_location"] valueForKey:@"city"]; 
NSString *countcode = [[results valueForKey:@"display_location"] valueForKey:@"country"]; 

Как я могу изменить, что для доступа, что я хочу?

Вот моя вторая попытка:

NSString *test = [[[results valueForKey:@"forecast"] valueForKey:@"period:0"] valueForKey:@"title"]; 

Спасибо за вашу помощь, Дэн.

+0

I не может видеть 'display_location' или' country' в вашем дампе JSON. Возможно, вы захотите вставить все соответствующие части. – DrummerB

+0

@DrummerB Я обновил сообщение с полным кодом. – Supertecnoboff

+0

Где это происходит? Поместите точку останова на первой строке и пройдите по ней шаг за шагом. – DrummerB

ответ

1

period является всего лишь ключом в первом словаре, содержащемся в массиве forecastday, со значением 0. Он никоим образом не идентифицирует словарь.

Чтобы получить значение заголовка в первом элементе forecastday, ваш код должен выглядеть следующим образом:

NSString *title = results[@"forecast"][0][@"title"]; 

Или, если вы не используете новую индексацию синтаксис:

NSString *title = 
    [[[results objectForKey:@"forecast"] objectAtIndex:0] objectForKey:@"title"]; 
+0

Когда я впервые узнал, как разбирать каналы JSON, я нашел ваш ответ очень трудно понять. Но теперь, когда я оглядываюсь назад, это так просто. Благодаря :) – Supertecnoboff