在序列化JSON时,我有两种类型的null:(null)
和<null>
作为NSDictionary
的值。
有什么区别以及如何对每一个进行验证?
答案 0 :(得分:5)
如果这些是由NSLog()
打印的说明,则(null)
是nil
或NULL
指针,可能是在字典上调用objectForKey:
的结果对于未定义的密钥。相比之下,<null>
是NSNull
的一个实例;可能是JSON解析器抛出的占位符,用于表示原始JSON中的null
值。
您可以通过将对象与空指针进行比较(或者只是在需要逻辑表达式的上下文中使用它们)来测试nil
和NULL
:
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!
}