gpt4 book ai didi

objective-c - TouchJSON,处理NSNull

转载 作者:太空狗 更新时间:2023-10-30 03:16:08 25 4
gpt4 key购买 nike

嗨我正在使用 TouchJSON 反序列化一些 JSON。我过去一直在使用它,在那些场合我手动处理 NSNull 的出现。我认为作者也必须处理这个问题,所以我再做一次只会是开销。然后我在文档中找到了这个:

Avoiding NSNull values in output.

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 的潜在警告。

最佳答案

对于另一个存在相同问题的 JSON 库,我在 NSDictionary 上创建了以下类别:

@implementation NSDictionary (Utility)

// in case of [NSNull null] values a nil is returned ...
- (id)objectForKeyNotNull:(id)key {
id object = [self objectForKey:key];
if (object == [NSNull null])
return nil;

return object;
}

@end

每当我处理来自上述库的 JSON 数据时,我都会像这样检索值:

NSString *someString = [jsonDictionary objectForKeyNotNull:@"SomeString"];

这样我的项目中的代码变得更加清晰,同时我不必考虑处理 [NSNull null] 值等。

关于objective-c - TouchJSON,处理NSNull,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5716942/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com