所以我正在解析一个推特时间线。JSON 响应中有一个名为“following”的字段。它应该是真或假。
但有时该字段丢失。
当我做:
NSLog(@"%@", [[[timeline objectAtIndex:i] objectForKey:@"user"] objectForKey:@"following"]);
这是输出:
1
1
0
0
1
<null>
1
1
那么如何检查这些值呢?
所以我正在解析一个推特时间线。JSON 响应中有一个名为“following”的字段。它应该是真或假。
但有时该字段丢失。
当我做:
NSLog(@"%@", [[[timeline objectAtIndex:i] objectForKey:@"user"] objectForKey:@"following"]);
这是输出:
1
1
0
0
1
<null>
1
1
那么如何检查这些值呢?
NSArray
并且其他集合不能nil
作为值,因为 nil 是集合结束时的“哨兵值”。您可以使用以下方法查找对象是否为空:
if (myObject == [NSNull null]) {
// do something because the object is null
}
如果该字段缺失,NSDictionary -objectForKey: 将返回一个 nil 指针。您可以像这样测试 nil 指针:
NSNumber *following = [[[timeline objectAtIndex:i] objectForKey:@"user"] objectForKey:@"following"];
if (following)
{
NSLog(@"%@", following);
}
else
{
// handle no following field
NSLog(@"No following field");
}
不是时间轴元素为空。它要么是“用户”字典,要么是为空的“关注”对象。我建议创建一个用户模型类来封装一些 json/字典的混乱。事实上,我敢打赌,你可以找到适用于 iOS 的开源 Twitter API。
无论哪种方式,您的代码都将更具可读性,例如:
TwitterResponse *response = [[TwitterResponse alloc] initWithDictionary:[timeline objectAtIndex:i]];
NSLog(@"%@", response.user.following);
TwitterResponse
上面将实现一个只读属性TwitterUser *user
,该属性又将实现NSNumber *following
. 使用NSNumber
是因为它允许空值(JSON 响应中的空字符串)。
希望这可以帮助您走上正轨。祝你好运!
要检查数组是否包含空值,请使用此代码。
if ([array objectAtIndex:0] == [NSNull null])
{
//do something
}
else
{
}