2014-12-05 3 views
1

У меня есть массив JSON, который я разбираю. Я анализирую значения из ключа Staff, однако иногда объект Staff не содержит значений;Как проверить, содержит ли объект JSON значения

Ожидаемый возврат;

enter image description here

Но иногда он возвращается:

enter image description here

Что вызывает приложение к краху, потому что key[@"staff"][@"staff_id"] оленья кожа существовать.

Ive пытался:

if (key[@"staff"][@"staff_id"]){ 
    //Parse staff 
} 
else{ 

    //staff is empty 

} 

Но это выходит из строя, а потому что я думаю, что он все еще ищет [@"staff_id"], который не суммируется и не существует.

Я также попытался

if (![key[@"staff"][@"staff_id"] isKindOfClass:[NSNull class]]) 

И

if (![key[@"staff"] isKindOfClass:[NSNull class]]) 

Любая помощь очень ценится. :)

ответ

2

Это отличный пример дерьмового бэкэнд.
На первом примере enter image description here персонал - это словарь, на втором примере enter image description here - это массив.

Вы должны спросить своего стороннего разработчика, решить и всегда возвращать либо массив, либо словарь.

Кстати, вы можете обойти это

if ([key[@"staff"] isKindOfClass:[NSDictionary class]] && key[@"staff"][@"staff_id"]) { 
    id staffId = key[@"staff"][@"staff_id"]; 
} else { 
    // Staff is empty 
} 
+1

Я хотел бы добавить к если условие && [ключ objectForKey: @ «staff_id»] только в том случае, так как вернулся JSON кажется unconsistent – Miknash

+0

я до вас голосовать дважды, если бы я мог. Огромное спасибо. :) – DevC

+0

@NickCatib исправлено, DevC это здорово :), если он исправил проблему, отметьте ее правильно для дальнейших читателей. – l0gg3r

1

Вы получите только объект класса NSNull если JSON содержит нулевое значение. Например, словарь {"key": null} будет содержать пару ключ/значение с ключом ключа и значением [NSNull null]. Вместо использования «isKindOfClass» вы можете сравнить с [NSNull null], потому что существует только один объект NSNull. Если ваш JSON не содержит нулевых значений, этого не произойдет.

Если ваш JSON иногда содержит словарь, а иногда и массив, это сложно. Обвините ребят, создающих JSON. Вы можете написать, например:

id keyObject = ...; 
NSDictionary* keyDictionary = keyObject; 
NSArray* keyArray = keyArray; 

if ([keyDictionary isKindOfClass:[NSDictionary class]]) { 
    .. you've got a dictionary 
} else if ([keyArray isKindOfClass [NSArray class]]) { 
    .. you've got an array 
} else if (keyObject == nil) { 
    .. there wasn't actually any key object 
} else if (keyObject == [NSNull null]) { 
    .. your JSON contained "key": null 
} else { 
    .. your JSON contained a string, number, or boolean value 
} 
+0

Спасибо @ gnasher729 :) – DevC