2014-12-08 4 views
-2

Я хотел бы получить определенные значения в NSDictionnary с данными json. Я бы хотел получить только первое значение для ключа «windspeedMiles», например (в current_condition). Мои данные Json Я принести это:Получение определенных данных Json с помощью NSDictionnary

{ 
    "data": { 
    "nearest_area": [ 
     { 
     "distance_miles": "0.0", 
     "latitude": "54.500", 
     "longitude": "-8.500" 
     } 
    ], 
    "request": [ 
     { 
     "query": "Lat 54.50 and Lon -8.50", 
     "type": "LatLon" 
     } 
    ], 
    "weather": [ 
     { 
     "date": "2014-12-09", 
     "hourly": [ 
      { 
      "cloudcover": "59", 
      "humidity": "84", 
      "precipMM": "0.1", 
      "pressure": "1024", 
      "sigHeight_m": "3.1", 
      "swellDir": "290", 
      "swellHeight_m": "3.0", 
      "swellPeriod_secs": "12.6", 
      "tempC": "5", 
      "tempF": "41", 
      "time": "0", 
      "visibility": "10", 
      "waterTemp_C": "12", 
      "waterTemp_F": "53", 
      "weatherCode": "116", 
      "weatherIconUrl": [ 
       { 
       "value": "http:\/\/cdn.worldweatheronline.net\/images\/wsymbols01_png_64\/wsymbol_0002_sunny_intervals.png" 
       } 
      ], 
      "winddir16Point": "SSW", 
      "winddirDegree": "204", 
      "windspeedKmph": "34", 
      "windspeedMiles": "21" 
      }, 
      { 
      "cloudcover": "84", 
      "humidity": "87", 
      "precipMM": "0.1", 
      "pressure": "1020", 
      "sigHeight_m": "0.6", 
      "swellDir": "240", 
      "swellHeight_m": "0.1", 
      "swellPeriod_secs": "12.4", 
      "tempC": "6", 
      "tempF": "42", 
      "time": "300", 
      "visibility": "10", 
      "waterTemp_C": "12", 
      "waterTemp_F": "53", 
      "weatherCode": "119", 
      "weatherIconUrl": [ 
       { 
       "value": "http:\/\/cdn.worldweatheronline.net\/images\/wsymbols01_png_64\/wsymbol_0003_white_cloud.png" 
       } 
      ], 
      "winddir16Point": "SSW", 
      "winddirDegree": "193", 
      "windspeedKmph": "45", 
      "windspeedMiles": "28" 
      }, 
      { 
      "cloudcover": "75", 
      "humidity": "91", 
      "precipMM": "0.4", 
      "pressure": "1016", 
      "sigHeight_m": "3.1", 
      "swellDir": "290", 
      "swellHeight_m": "3.0", 
      "swellPeriod_secs": "11.3", 
      "tempC": "7", 
      "tempF": "44", 
      "time": "600", 
      "visibility": "2", 
      "waterTemp_C": "12", 
      "waterTemp_F": "53", 
      "weatherCode": "266", 
      "weatherIconUrl": [ 
       { 
       "value": "http:\/\/cdn.worldweatheronline.net\/images\/wsymbols01_png_64\/wsymbol_0017_cloudy_with_light_rain.png" 
       } 
      ], 
      "winddir16Point": "SSW", 
      "winddirDegree": "193", 
      "windspeedKmph": "54", 
      "windspeedMiles": "34" 
      }, 
      { 
      "cloudcover": "0", 
      "humidity": "93", 
      "precipMM": "0.8", 
      "pressure": "1011", 
      "sigHeight_m": "1.0", 
      "swellDir": "250", 
      "swellHeight_m": "0.2", 
      "swellPeriod_secs": "10.6", 
      "tempC": "16", 
      "tempF": "61", 
      "time": "900", 
      "visibility": "10", 
      "waterTemp_C": "12", 
      "waterTemp_F": "53", 
      "weatherCode": "113", 
      "weatherIconUrl": [ 
       { 
       "value": "http:\/\/cdn.worldweatheronline.net\/images\/wsymbols01_png_64\/wsymbol_0001_sunny.png" 
       } 
      ], 
      "winddir16Point": "SSW", 
      "winddirDegree": "202", 
      "windspeedKmph": "62", 
      "windspeedMiles": "39" 
      }, 
      { 
      "cloudcover": "98", 
      "humidity": "95", 
      "precipMM": "6.6", 
      "pressure": "1006", 
      "sigHeight_m": "3.7", 
      "swellDir": "290", 
      "swellHeight_m": "3.6", 
      "swellPeriod_secs": "11.0", 
      "tempC": "18", 
      "tempF": "65", 
      "time": "1200", 
      "visibility": "7", 
      "waterTemp_C": "12", 
      "waterTemp_F": "53", 
      "weatherCode": "302", 
      "weatherIconUrl": [ 
       { 
       "value": "http:\/\/cdn.worldweatheronline.net\/images\/wsymbols01_png_64\/wsymbol_0018_cloudy_with_heavy_rain.png" 
       } 
      ], 
      "winddir16Point": "SW", 
      "winddirDegree": "220", 
      "windspeedKmph": "64", 
      "windspeedMiles": "40" 
      }, 
      { 
      "cloudcover": "89", 
      "humidity": "95", 
      "precipMM": "8.3", 
      "pressure": "1003", 
      "sigHeight_m": "4.3", 
      "swellDir": "290", 
      "swellHeight_m": "4.0", 
      "swellPeriod_secs": "10.9", 
      "tempC": "19", 
      "tempF": "65", 
      "time": "1500", 
      "visibility": "5", 
      "waterTemp_C": "12", 
      "waterTemp_F": "53", 
      "weatherCode": "308", 
      "weatherIconUrl": [ 
       { 
       "value": "http:\/\/cdn.worldweatheronline.net\/images\/wsymbols01_png_64\/wsymbol_0018_cloudy_with_heavy_rain.png" 
       } 
      ], 
      "winddir16Point": "SW", 
      "winddirDegree": "234", 
      "windspeedKmph": "60", 
      "windspeedMiles": "38" 
      }, 
      { 
      "cloudcover": "49", 
      "humidity": "73", 
      "precipMM": "1.5", 
      "pressure": "1004", 
      "sigHeight_m": "5.7", 
      "swellDir": "290", 
      "swellHeight_m": "5.3", 
      "swellPeriod_secs": "10.8", 
      "tempC": "7", 
      "tempF": "45", 
      "time": "1800", 
      "visibility": "10", 
      "waterTemp_C": "12", 
      "waterTemp_F": "53", 
      "weatherCode": "353", 
      "weatherIconUrl": [ 
       { 
       "value": "http:\/\/cdn.worldweatheronline.net\/images\/wsymbols01_png_64\/wsymbol_0009_light_rain_showers.png" 
       } 
      ], 
      "winddir16Point": "W", 
      "winddirDegree": "261", 
      "windspeedKmph": "66", 
      "windspeedMiles": "41" 
      }, 
      { 
      "cloudcover": "58", 
      "humidity": "73", 
      "precipMM": "0.5", 
      "pressure": "1005", 
      "sigHeight_m": "7.2", 
      "swellDir": "290", 
      "swellHeight_m": "6.7", 
      "swellPeriod_secs": "10.6", 
      "tempC": "5", 
      "tempF": "42", 
      "time": "2100", 
      "visibility": "10", 
      "waterTemp_C": "12", 
      "waterTemp_F": "53", 
      "weatherCode": "353", 
      "weatherIconUrl": [ 
       { 
       "value": "http:\/\/cdn.worldweatheronline.net\/images\/wsymbols01_png_64\/wsymbol_0009_light_rain_showers.png" 
       } 
      ], 
      "winddir16Point": "W", 
      "winddirDegree": "260", 
      "windspeedKmph": "79", 
      "windspeedMiles": "49" 
      } 
     ], 
     "maxtempC": "19", 
     "mintempC": "5" 
     } 
    ] 
    } 
} 

Вот мой код:

Reports.m:

#import "Reports.h" 

@interface Reports() 

@end 

@implementation Reports 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

     NSURL *url = [NSURL URLWithString:@"http://api.worldweatheronline.com/free/v2/weather.ashx?q=Bundoran&format=json&num_of_days=5&key=e1caa114b7fba6f5bcea272e1fc77"]; 

     NSData *data = [NSData dataWithContentsOfURL:url]; 
     NSDictionary *dico = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil]; 

     NSDictionary *wind = [dico objectForKey:@"windspeedMiles"]; 
     NSLog(@"The current windspeedMiles is : %@", wind); 

} 


- (void)didReceiveMemoryWarning { 
    [super didReceiveMemoryWarning]; 
    // Dispose of any resources that can be recreated. 
} 



@end 
+3

Ok. Каков твой вопрос? – Madbreaks

+0

@Madbreaks Я хотел бы получить только первое значение для ключа «windspeedMiles», например (в current_condition). Мой NSLog отправляет мне: «nil», и я хочу, чтобы это отправило мне значение в current_condition i.e.: «19» – Viny76

+0

Итак, у вас есть раскладка JSON. Макет объекта Objective-C будет таким же после разбора с помощью NSJSONSerialization. Просто пройдите через уровни и получите данные. –

ответ

0

Ваши предназначенные ключевые постоянно находится в гнездовой NSDictionary объекта, так что вы не можете получить его с помощью:

NSDictionary *wind = [dico objectForKey:@"windspeedMiles"]; 
NSLog(@"The current windspeedMiles is : %@", wind); 

Использование:

NSDictionary *wind = [dico[@"data"][@"condition"] objectAtIndex:0]; 
NSLog(@"The current windspeedMiles is : %@", wind[@"windspeedMiles"]); 
+0

Downvoter, пожалуйста, укажите причину. –

+0

Точно то, что я хочу! Он отлично работает, не голосуйте! – Viny76

+0

@ Viny76: Я знаю, что ответ верный, а downvoter также знает, что ответ в порядке. Есть некоторые люди, когда они получают достаточную репутацию, они начинают свой садистский менталитет и подавляют всех, особенно новых пользователей SO. Не могу сказать ничего об этом. Я рад слышать, что это сработало для вас :) –

1

Чтобы захватить, что определенное значение в структуре Вы в курсе, вы бы доступ:

[[[[dico objectForKey:@"data"] objectForKey:@"current_condition"] objectAtIndex:0] objectForKey:@"windspeedMiles"] 

Вам просто нужно посмотреть на вашу структуру. Когда вы получите свой словарь с JSONObjectWithData, он даст вам NSDictionary для каждого набора фигурных фигурных скобок и NSArray для каждого набора квадратных.

Поскольку все в вашем JSON является суб-объектом «Data», я бы рекомендовал создать оригинал NSDictionary как:

NSDictionary *dico = [[NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil] objectForKey:@"data"]; 

Таким образом, вы не должны иметь ссылки на «данных» словарь ,

+0

В чем причина понижения? Его ответ правильный? –

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