您好我正在使用 TouchJSON 反序列化一些 JSON。我过去一直在使用它,在那些情况下,我手动处理了 NSNull 的出现。我认为作者也必须处理这个问题,所以我再次这样做只是开销。然后我在文档中找到了这个:
在输出中避免 NSNull 值。
NSData *theJSONData = /* some JSON data */
CJSONDeserializer *theDeserializer = [CJSONDeserializer deserializer];
theDeserializer.nullObject = NULL;
NSError *theError = nil;
id theObject = [theDeserializer deserialize:theJSONData error:&theError];}
我理解它的方式是,该类的用户可以将 C 风格的空指针传递给反序列化器,当它遇到 NSNull 时,它将插入传递给它的值(NULL)。所以稍后当我使用这些值时,我不会得到 NSNull,而是 NULL。
这看起来很奇怪,返回值是一个只能包含对象的 NSDictionary,值不应该默认为“nil”吗?
如果它是NULL,我可以检查这样的值吗?
if([jsonDataDict objectForKey:someKey] == NULL)
能够做到这一点似乎更合乎逻辑:
if(![jsonDataDict objectForKey:someKey])
更不用说允许传递 nil 但传递 NULL 会导致崩溃的所有情况。
或者我可以将'nil'传递给反序列化器吗?
这在很大程度上源于我仍在为 nil、NULL、[NSNULL null] 苦苦挣扎,也许我没有看到使用 nil 的潜在警告。