- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
嗨我正在使用 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/
我正在使用 TouchJSON 来解析 JSON 数据。 结果中,数组中的字符串均为\U**格式。 是的,它们是英语以外的其他语言。 为什么 TouchJSON 不能直接通过 UTF8 将它们替换为真
我正在为 ipad 开发一个小应用程序,我正在尝试将字典序列化为 NSData 以保存在磁盘中。我正在使用框架 TouchJson。我的示例结构示例: { line = { 78986
我正在从网络服务接收一些 json。我使用 TouchJSON 库解析它。我保留数据供用户更改某些值,然后我想将其返回到 Web 服务。 我得到的 JSON 对象在对象中包含 NSDictionary
嗨我正在使用 TouchJSON 反序列化一些 JSON。我过去一直在使用它,在那些场合我手动处理 NSNull 的出现。我认为作者也必须处理这个问题,所以我再做一次只会是开销。然后我在文档中找到了这
我是 iOS 开发的新手。经过多次尝试;通过大量示例代码,我设法从服务器解析 json 字符串,并能够在动态表格 View 中显示结果。我的问题是我无法使单元格可单击,因此它们会将 id 和标签传递到
我正在使用 touchJson 从服务器反序列化我的 json。我的 json 如下所示: {"text":"abc", "user_id":12345} 反序列化后,我使用以下代码获取 Json 值
我昨晚用 TouchJSON 做了一些测试,对于简单的情况来说,它通常运行得很好。我使用以下代码从文件中读取一些 JSON 内容,并将其反序列化: NSString *jsonString = [[N
我正在使用 TouchJSON 框架反序列化一些 JSON。来自解析的字典数组用于填充 UITableView。 有可能我解析的 JSON 中的某些值是空的。如果我将它 NSLog 到控制台,结果如下
我真的是 Cocoa 开发的新手,所以请多多关照。无论如何,我正在尝试反序列化我通过 TouchJSON 从服务器发送的 JSON 字符串,但我收到编译器警告 'NSDictionary' may n
我有一个包含 TouchJSON 的静态库,我正在尝试使用 dictionaryWithJSONString:error:(在静态库中),但我不断收到标题中显示的运行时异常。 我已经包含了NSDict
据我所知,Objective-C 有三个 JSON 解析器,JSON Framework , YAJL , 和 Touch JSON .那么,这三者就各有特点了。 例如: YAJL 可以用作 SAX
我是一名优秀的程序员,十分优秀!