如何从JSON获取布尔值?

时间:2012-04-07 11:46:11

标签: iphone ios objective-c

假设这是我想要分配给BOOL变量的JSON中的值:

"retweeted": false

以下是我解析JSON数据的方法:

NSError *error;
NSArray *timeline = [NSJSONSerialization JSONObjectWithData:responseData options:NSJSONReadingMutableLeaves error:&error];

现在,我将bool属性定义为:

BOOL *retweeted;

我班上。当我在解析JSON的时候这样做:

tweet.retweeted = [[[timeline objectAtIndex:i] objectForKey:@"retweeted"] boolValue];

我收到此错误:

enter image description here

如何解决这个问题?

3 个答案:

答案 0 :(得分:14)

BOOL *retweeted;

这是错误的,布尔值是标量,而不是Objective-C对象,所以它们不需要被声明为指针。使用

BOOL retweeted;

代替。

答案 1 :(得分:14)

我首选的方法是:

BOOL success = [[responseObject valueForKey:@"success"] boolValue]

清洁,简洁和内联。

答案 2 :(得分:8)

使用NSJSONSerialization序列化后,布尔值存储为NSNumber。如果你看一下它实际存储的类型是__NSCFBoolean但是没关系。 NSNumber是一个不存在的抽象类。系统使用具体类存储该值。

所以

NSNumber* boolean = [serializedDictionary valueForKey:@"boolValue"];

这会为@0返回NO,为@1返回YES。您可以通过执行以下操作将is用作booleanValue:

if(boolean.boolValue){
  // ...
}