NSJSONSerialization 未正确映射布尔值

Posted

技术标签:

【中文标题】NSJSONSerialization 未正确映射布尔值【英文标题】:NSJSONSerialization not mapping boolean correctly 【发布时间】:2012-12-09 09:57:42 【问题描述】:

我正在从The Joys of Code 读取数据。 API 以 JSON 格式返回数据,其中布尔变量的写法如下:

 "obj" :
    
      "sharing":false,
      "modified":"tuesday"
   

注意,sharing:false 在单词 false 周围有引号。然后我使用 NSJSONSerialization 将此 JSON 解析为一个对象(本例中为 NSDictionary)。

问题是,"sharing":false 或 "sharing":true 总是创建一个 shared = 0 的对象,其中 0 是一个值为 0 的 NSNumber。

我的问题是这是否是有效的 JSON 并且 NSJSONSerialization 无法正常工作,或者原始 JSON 是否无效。

【问题讨论】:

一切都很好。必须是您尝试读取从 NSJSON 获取的字典的方式 好的。我应该先检查一下。问题是服务器。它总是返回 false。 :) 我也经常很快责备系统类,而且通常是错误的:/ @PauldeLange,我就是这么说的。如果为真,您将得到 1。不是零。 【参考方案1】:

NSJSONSerialization 对我来说可以很好地使用上面的 json(输入 false 和 true):

NSData *json = [@" \"obj\" : \
                 \
                \"sharing\":false, \
                \"modified\":\"tuesday\" \
                 \
                " dataUsingEncoding:NSUTF8StringEncoding];
id dict = [NSJSONSerialization JSONObjectWithData:json options:0 error:nil];
id sharing = dict [@"obj"][@"sharing"];
NSLog(@"%d", [sharing boolValue]);

json = [@" \"obj\" : \
                 \
                \"sharing\":true, \
                \"modified\":\"tuesday\" \
                 \
                " dataUsingEncoding:NSUTF8StringEncoding];
dict = [NSJSONSerialization JSONObjectWithData:json options:0 error:nil];
sharing = dict [@"obj"][@"sharing"];
NSLog(@"%d", [sharing boolValue]);

【讨论】:

谢谢。我只是做了完全相同的事情并且它有效。 -> 是一个服务器错误,总是返回 false。【参考方案2】:

有效。您始终可以从 NSNumber 获取 BOOL[number boolValue] 并将其检查为

if ([number boolValue])

if ([number boolValue] == YES)

【讨论】:

好的,它有效吗?你有参考资料,所以我可以向 Apple 询问为什么 NSJSONSerialization 总是将其映射到 NO? @PauldeLange,它不应该总是NO。它应该是 0 代表假,1 代表真。 @PauldeLange,您是否在询问技术支持,developer.apple.com/support/technical/submit.. 刚刚检查了一些关于 bool 和 json 的其他问题,看起来我上面的答案应该在这种情况下有所帮助。在这里看到这个问题***.com/questions/7530173/….. 不知道为什么你在那里没有得到真实..

以上是关于NSJSONSerialization 未正确映射布尔值的主要内容,如果未能解决你的问题,请参考以下文章

NSJSONSerialization 问题 - 正确数量的对象,全部“无效”

在 Swift (2.0) 中正确处理 NSJSONSerialization (try catch)?

NSJSONSerialization 不更新数据

使用 NSDictionary 访问 NSJSONSerialization 数据

RestKit 响应未正确映射

OpenGL 纹理未正确映射