(null)和<null>之间的差异</null>

时间:2013-11-20 07:17:40

标签: ios objective-c json null

在序列化JSON时,我有两种类型的null:(null)<null>作为NSDictionary的值。

有什么区别以及如何对每一个进行验证?

1 个答案:

答案 0 :(得分:5)

如果这些是由NSLog()打印的说明,则(null)nilNULL指针,可能是在字典上调用objectForKey:的结果对于未定义的密钥。相比之下,<null>NSNull的一个实例;可能是JSON解析器抛出的占位符,用于表示原始JSON中的null值。

您可以通过将对象与空指针进行比较(或者只是在需要逻辑表达式的上下文中使用它们)来测试nilNULL

if ([dict objectForKey:@"NonExistentKey"] != nil) {
    // yay, existent!
}

但是,NSNull是一个正确的Objective-C类,因此它的实例将通过isEqual:消息进行比较:

if ([[dict objectForKey:@"KeyOfWhichValueIsNull"] isEqual:[NSNull null]]) {
    // `null` in the JSON, but NOT `nil` or `NULL` at runtime!
}