我有一个我解析的JSON数组。我解析了密钥Staff
中的值,但有时Staff
对象不包含任何值;
预期回报;
但有时它会返回:
导致应用崩溃,因为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]])
非常感谢任何帮助。 :)
答案 0 :(得分:2)
这是一个糟糕的后端的一个很好的例子 在第一个例子工作人员是一个字典,在第二个例子是一个数组。
您需要询问后端开发人员,决定并始终返回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
}