嗨 我正在使用TouchJSON反序列化一些JSON。我过去一直在使用它,在那些我手动处理NSNull事件的场合。我认为作者也必须处理这个问题,所以我再这样做只会是开销。然后我在文档中找到了这个:TouchJSON,处理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])
没有提都在那里路过零被允许的,但传递NULL导致崩溃的情况。
或者我可以将'零'传递给解串器吗?
这很大一部分来自我仍然努力与零,NULL,[NSNULL null],也许我没有看到使用零的潜在警告。
我在下面评论过,但为了这个问题的后代,NSDictionary *不能包含零作为键或值。来自Cocoa文档:“键或值都不可以为零;如果您需要在字典中表示空值,则应该使用NSNull。” – Erik 2012-08-10 03:51:55