2014-11-09 7 views
0

Я новичок в IOS dev, и мне действительно нужна помощь.IOS Dev Fetching JSON Data

Я хочу проанализировать (который работает) и получить некоторые данные JSON. я использовал этот учебник для запроса HTTP и JSON разборе http://www.mysamplecode.com/2013/04/ios-http-request-and-json-parsing.html

все отлично работает с 1 размерным словарем

, но мне нужно, чтобы иметь возможность получать следующие JSON данных

[{"defaultGateway": "10.10.10.254", "hostname": "On", "connected": "true", "subnetMask": "255.255.255.255", "iPAddress": "10.10.10.10", "dhcpEnabled": "true"}, 
{"defaultGateway": "10.10.10.254", "hostname": "On", "connected": "true", "subnetMask": "255.255.255.255", "iPAddress": "10.10.10.10", "dhcpEnabled": "true"}] 

после Я использую следующую функцию. У меня есть следующий словарь, который я действительно не знаю, как получить доступ.

NSDictionary * res = [NSJSONSerialization 
        JSONObjectWithData:data 
        options:NSJSONReadingMutableContainers 
        error:&error]; 

здесь картина словаря http://www11.pic-upload.de/09.11.14/5n4hdg3eh84q.png

Как я могу получить доступ к примеру DefaultGateway в первом словаре?

+0

Перейти к json.org и изучить синтаксис JSON. Это займет всего 5-10 минут. Затем обратите внимание, что массив JSON сопоставляется с NS (Mutable) Array, а объект JSON сопоставляется с NS (Mutable) Dictionary. Дампы NSArray, из NSLog, заключены в квадратные скобки с помощью '()', в то время как дампы NSDictionary заключены в квадратные скобки с помощью '{}'. Теперь посмотрите на дамп NSLog 'res' и скажите мне, что у вас есть. (Дисплей отладчика обманчив.) –

+0

Я получил следующий дамп, используя NSLog http://www11.pic-upload.de/09.11.14/xp5sttdy3u2m.png – amori

+0

И вы увидите, что «самые внешние» скобки - '() ', что означает, что самым внешним объектом является NS (Mutable) Array, а не словарь. –

ответ

0

У вас есть небольшая логическая ошибка в вашем примере. Выражение [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:&error]; возвращает NSArray, а не NSDictionary. Итак, сначала вы должны изменить эту часть:

NSArray *result = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:&error]; 

Я знаю, что это массив, потому что ваша строка JSON содержит массив из двух объектов JSON. NSJSONSerialization преобразует массивы JSON в объекты типа NSArray и объекты JSON в объекты типа NSDictionary.

Если вы не уверены, что ваш JSON содержит, вы можете сделать следующее:

id result = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:&error]; 
if ([result isKindOfClass:[NSArray class]]){ 
// do something with the array 
} 
else if ([result isKindOfClass:[NSDictionary class]]){ 
// do something with the dictionary 
} 

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

NSString *gateway = [dictionary objectForKey:@"defaultGateway"]; 

или даже быстрее:

NSString *gateway = dictionary[@"defaultGateway"]; 

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

NSArray *result = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:&error]; // parse the JSON and store in array 
NSDictionary *dict = result[0]; // take the first of the two JSON objects and store it in a dictionary 
NSString *gateway = dictionary[@"defaultGateway"]; // retrieve the defaultGateway property 
+0

спасибо вам большое сэр: D – amori

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