2012-12-09 30 views
-1

我正在从The Joys of Code读取数据。 JSON格式的API返回数据,其中布尔变量被写成这样:NSJSONSerialization无法正确映射布尔值

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

注意,共享:假不有字周围引号。然后,我使用NSJSONSerialization将此JSON解析为一个对象(本例中为NSDictionary)。

的问题是,“分享”:虚假或“共享”:真总是创造与共享= 0,其中0是一个NSNumber与值的对象​​0

我的问题是,如果这是有效的JSON和NSJSONSerialization无法正常工作,或者如果原始JSON无效。

+0

一切都很好。必须在你如何尝试阅读从NSJSON –

+0

得到的字典好吧。我应该先检查一下。问题是服务器。它总是返回false。 –

+0

:)林也往往很快责怪系统类,一般都是错的:/ –

回答

2

NSJSONSerialization工作正常,我与上述JSON(投入虚实):

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]); 
+0

谢谢。我只是做了完全相同的事情,它的工作原理。 - >是一个始终返回false的服务器错误。 –

0

它是有效的。你总是可以从NSNumber得到BOOL[number boolValue],并检查它作为

if ([number boolValue]) 

if ([number boolValue] == YES) 
+0

好吧,它是有效的?你有一个参考,所以我可以询问Apple为什么NSJSONSerialization总是将其映射到NO? –

+0

@PauldeLange,它不应该总是“不”。它应该是0代表假,1代表真。 – iDev

+1

@PauldeLange,你在问技术支持吗,https://developer.apple.com/support/technical/submit/ ..刚刚检查了关于bool和json的其他几个问题,看起来像我的上面的答案应该有助于在这种情况下。在这里看到这个问题http://stackoverflow.com/questions/7530173/how-to-parse-json-in-ios-app ..不知道你为什么不在那里得到真实.. – iDev