NSJSONSerialization无法处理空值

时间:2012-08-01 16:21:00

标签: ios ios5

我有一些看起来像这样的代码:

NSDictionary* json = [NSJSONSerialization JSONObjectWithData:data
                                                     options:kNilOptions
                                                       error:&error];

NSArray *arrRequests = [NSJSONSerialization JSONObjectWithData:data
                                                       options:NSJSONReadingMutableContainers
                                                         error:nil];

// Loop through the array and generate the necessary annotation views
for (int i = 0; i<= arrRequests.count - 1; i++)
{
    //now let's dig out each and every json object
    NSDictionary *dict = [arrRequests objectAtIndex:i];

    NSString *is_private = [NSString
                            stringWithString:[dict objectForKey:@"is_private"]];
                            ...

当is_private的值为1或0时,它可以工作,但如果它为null,则会在此行上出现异常崩溃:

NSString *is_private = [NSString stringWithString:[dict objectForKey:@"is_private"]];

有没有办法检查它是否为空或处理它,以便能够将nil放入NSString * is_private变量?

谢谢!

3 个答案:

答案 0 :(得分:3)

您应该能够像这样处理它:

id value = [dict valueForKey:@"is_private"];
NSString *is_private = [value isEqual:[NSNull null]] ? nil : value;

答案 1 :(得分:1)

为什么在将[dict objectForKey:@"is_private"]传递给nil之前,您只是检查[NSNull null]stringWithString:还是{{1}}?

答案 2 :(得分:1)

您的问题与NSJSONSerialization无关,而且与您将nil值传递给stringWithString:的事实有关。为什么不只是那条线到NSString *is_private = [dict objectForKey:@"is_private"];

另外,为什么使用NSString来存储布尔值? NSNumber会更合适。