NSJSONSerialization没有正确映射布尔值

时间:2012-12-09 09:57:43

标签: ios json parsing nsjsonserialization

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

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

注意,分享:false false 这个词周围加上引号。然后我使用NSJSONSerialization将此JSON解析为一个对象(在此示例中为NSDictionary)。

问题是,“共享”:false或“sharing”:true总是创建一个share = 0的对象,其中0是值为0的NSNumber。

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

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

有效。您始终可以BOOLNSNumber获取[number boolValue]并将其设为

if ([number boolValue])

if ([number boolValue] == YES)