如何从JSON获取布尔值?

Ric*_*nop 4 iphone objective-c ios

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

"retweeted": false
Run Code Online (Sandbox Code Playgroud)

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

NSError *error;
NSArray *timeline = [NSJSONSerialization JSONObjectWithData:responseData options:NSJSONReadingMutableLeaves error:&error];
Run Code Online (Sandbox Code Playgroud)

现在,我有一个bool属性定义为:

BOOL *retweeted;
Run Code Online (Sandbox Code Playgroud)

在我的课堂里.当我在解析JSON时这样做:

tweet.retweeted = [[[timeline objectAtIndex:i] objectForKey:@"retweeted"] boolValue];
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

在此输入图像描述

如何解决这个问题呢?

小智 15

BOOL *retweeted;
Run Code Online (Sandbox Code Playgroud)

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

BOOL retweeted;
Run Code Online (Sandbox Code Playgroud)

代替.


met*_*tic 14

我首选的方法是:

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

干净,简洁,内联.


doo*_*Men 8

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

所以

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

这将返回@0for NO@1for YES.您可以通过执行以下操作将is用作booleanValue:

if(boolean.boolValue){
  // ...
}
Run Code Online (Sandbox Code Playgroud)