2016-12-02 6 views
0

Я хочу, чтобы разобрать parseItems, но я не знаю, какObjective C - Разбираем JSon массив

json = [ 
    { 
    "devicename" : "WL-00000003", 
    "activated" : "true", 
    "displayname" : "wit003 ", 
    "portitems" : { 
     "port1" : "Smoke Sensor", 
     "port4" : "", 
     "port3" : "", 
     "port6" : "Alarm Siren", 
     "port2" : "", 
     "port5" : "" 
    }, 
    "accountType" : "admin", 
    "deviceaddress" : "", 
    "devicestatus" : "" 
    } 
] 

Было бы легко, если бы portItems в этом формате "portitems" : ({ })

Я попробовал его с помощью этого кода но он получает ошибку.

NSDictionary *fetchedDictionaryresult = [json objectForKey:@"portItems"]; 
    for (NSDictionary *event in fetchedDictionaryresult) 
    { 
     _strPart1 = [event objectForKey:@"port1"]; 
     _strPart2 = [event objectForKey:@"port2"]; 
     _strPart3 = [event objectForKey:@"port3"]; 
     _strPart4 = [event objectForKey:@"port4"]; 
     _strPart5 = [event objectForKey:@"port5"]; 
     _strPart6 = [event objectForKey:@"port6"]; 
    } 

Как это сделать?

+0

это JSON словарь – theFool

+0

'portitems'! =' PortItems'. C/Objective-C чувствителен к регистру. – vadian

ответ

1

для получения portItems вам не нужно цикл только непосредственно использовать словарь fetchedDictionaryresult как это:

Кроме того, я предполагаю, что у вас есть массив не словарь в Json

Попробуйте следующее:

NSDictionary *fetchedDictionaryresult = [json[0] objectForKey:@"portItems"]; 

_strPart1 = [fetchedDictionaryresult objectForKey:@"port1"]; 
_strPart2 = [fetchedDictionaryresult objectForKey:@"port2"]; 
_strPart3 = [fetchedDictionaryresult objectForKey:@"port3"]; 
_strPart4 = [fetchedDictionaryresult objectForKey:@"port4"]; 
_strPart5 = [fetchedDictionaryresult objectForKey:@"port5"]; 
_strPart6 = [fetchedDictionaryresult objectForKey:@"port6"]; 
+0

Но это get is this error '- [__ NSSingleObjectArrayI objectForKey:]: непризнанный селектор, отправленный в экземпляр – theFool

+0

Check мой обновленный ответ, я думаю, вы получаете Array в 'json' не NSDictionary. – CodeChanger

+0

Yup Я получаю массив, я объединять свой код с моим lol. – theFool

1

Попробуйте это Здесь json сначала разбирается в словаре, а затем мы получаем словарь «portitems», а затем получаем строки из него.

- (void)setPartStringsFrom:(NSData *)json 
{ 
    NSError *localError = nil; 
    NSDictionary *parsedObject = [NSJSONSerialization JSONObjectWithData:json options:0 error:&localError]; 

    if (localError == nil) { 
     NSDictionary *event = [parsedObject[0] valueForKey:@"portitems"]; 

     _strPart1 = [event valueForKey:@"port1"]; 
     _strPart2 = [event valueForKey:@"port2"]; 
     _strPart3 = [event valueForKey:@"port3"]; 
     _strPart4 = [event valueForKey:@"port4"]; 
     _strPart5 = [event valueForKey:@"port5"]; 
     _strPart6 = [event valueForKey:@"port6"]; 

    } 
} 

и если json уже словарем то

- (void)setPartStringsFrom:(NSDictionary *)json 
{ 
    NSDictionary *event = [json[0] valueForKey:@"portitems"]; 

    _strPart1 = [event valueForKey:@"port1"]; 
    _strPart2 = [event valueForKey:@"port2"]; 
    _strPart3 = [event valueForKey:@"port3"]; 
    _strPart4 = [event valueForKey:@"port4"]; 
    _strPart5 = [event valueForKey:@"port5"]; 
    _strPart6 = [event valueForKey:@"port6"]; 
} 
+0

Я предполагаю, что ошибка вызвана вызовом objectForKey: –

+0

Проверьте [this] (http://stackoverflow.com/questions/1062183/difference-between-objectforkey-and-valueforkey). –

+0

Вероятно, это объект objectKey и valueForKey, которые сделали ошибку. – theFool

1
NSDictionary *dict= [responce valueforkey:@"portitems"]; 
NSMutableArray *portitems1=[dict valueForKey:@"port1"]; 
NSMutableArray *portitems2=[dict valueForKey:@"port2"]; 
NSMutableArray *portitems3=[dict valueForKey:@"port3"]; 
NSMutableArray *portitems4=[dict valueForKey:@"port4"]; 
NSMutableArray *portitems5=[dict valueForKey:@"port5"];                    
+0

Здесь средство ответа означает объект словаря результата результата. –

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