2013-04-25 2 views
1

Я пытаюсь создать приложение для погоды, я нашел отличный API погоды JSON онлайн. Я используюКак использовать JSON для iPhone-приложения?

NSData * data = [NSData dataWithContentsOfURL: [NSURL URLWithString: absoluteURL]]; 
NSError * error; 
NSDictionary * json = [NSJSONSerialization JSONObjectWithData: data //1 
    options: kNilOptions 
    error: & error 
]; 
NSLog(@"%@", json); 
NSLog([NSString stringWithFormat: @"location: %@", [json objectForKey: @"status"]]); 

, чтобы получить данные, но это не будет работать, журнал возвращается (null). Может кто-нибудь объяснить мне, как я могу получить строки и значения файла JSON? Благодаря!

+2

Что в 'ошибка'? Проделали ли вы какую-либо базовую отладку? – Wain

+0

@Wain Ошибка в том, что я хочу получить погодный статус, а не (null) :) Мне нравится обучать статус погоды в журнале, но вместо того, чтобы, например, cloudy Я получаю (null) Я добавил погоду, так что вы можете посмотреть, как она отформатирована. –

+1

Атрибут ошибки, который вы передаете в вызове JSONObjectWithData. Распечатайте его в журнале. – Wain

ответ

2

Edit: Изменение кода из строки 3 (в том числе) к:

NSDictionary * json = [NSJSONSerialization JSONObjectWithData:data options:0 error:&error]; 
NSArray *meta = json[@"objects"]; 

for (NSDictionary *aDict in meta) { 
    NSDictionary *location = aDict[@"location"]; 
    NSLog(@"%@", location); 
} 

Это NSLog() S все места в вашем JSON response.

Если вы хотите city и country только один раз вы можете сделать следующее:

NSDictionary *location = json[@"objects"][0][@"location"]; 
NSString *country = location[@"country"]; 
NSString *locality = location[@"locality"]; 

NSLog(@"country: %@", country); 
NSLog(@"locality: %@", locality); 

Выход:

Страна: Германия
местонахождение: Hauzenberg

+0

Still (null) :( –

+0

Является ли ваш «data» nil? – HAS

+0

@HSA Локатор местоположения (null), но json Log (NSLog (@ "% @", json)) не является (nil), он показывает весь сценарий JSON, поэтому я думаю, что что-то не так с «сканирующей вещью» –

0

В статусе нет элемента e корень вашего JSON. Объект json будет содержать точно такую ​​же иерархию, что и ваш JSON. В вашем случае это будет выглядеть так:

root (dictionary) 
    | 
    -- "objects": (array) 
     | 
     -- (dictionary) 
       | 
       -- "sources" (array) 
       -- "weather" (dictionary) 
... 

Вы получаете идею.

Попробуйте это:

for (NSDictionary *object in json[@"objects"]) 
{ 
    NSLog([NSString stringWithFormat: @"location: %@", object[@"weather"][@"status"]]); 
} 
+0

@Maroux ОК, он работает, но скрипт JSON имеет 11 статусов, мне нужен только первый, есть ли способ получить 11 разных статуй в виде 11 строк? –