如何检查JSON对象是否包含值

时间:2014-12-05 15:19:45

标签: objective-c json

我有一个我解析的JSON数组。我解析了密钥Staff中的值,但有时Staff对象不包含任何值;

预期回报;

enter image description here

但有时它会返回:

enter image description here

导致应用崩溃,因为key[@"staff"][@"staff_id"]不存在。

我试过了:

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 个答案:

答案 0 :(得分:2)

这是一个糟糕的后端的一个很好的例子 在第一个例子enter image description here工作人员是一个字典,在第二个例子enter image description here是一个数组。

您需要询问后端开发人员,决定并始终返回Array或Dictionary。

BTW,你可以解决它

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

答案 1 :(得分:1)

如果JSON包含空值,您将只获得类NSNull的对象。例如,字典{“key”:null}将包含具有键“key”和值[NSNull null]的键/值对。您可以与[NSNull null]进行比较,而不是使用“isKindOfClass”,因为只有一个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
}