TouchJSON,处理NSNull
|
你好
我正在使用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的潜在警告。
没有找到相关结果
已邀请:
3 个回复
肉簧咸缮
和ѭ4actually实际上都等于零,因此在实践中它们是可互换的。但是您是对的,为了保持一致性,TouchJSON的文档应该使用
而不是
。 现在,当您这样做时,您的第二个谓词实际上可以正常工作:
因为当您将
设置为
(或
)时,TouchJSON会从字典中省略键。当字典中不存在该键时,NSDictionary返回nil,它为零,因此if条件可以按预期工作。 如果您未将
指定为
,则可以改为检查null,如下所示:
玩翁文醚碱
每当我处理来自所述库的JSON数据时,我都会检索如下值:
这样,我项目中的代码将变得更加整洁,同时,我也不必考虑处理[NSNull null]值等。
徘廷
该值将是
或
,并且您不应该自己检查NSNull和NULL。