可可:JSON返回的整数值是id不是整型,如何类型转换成整型



我有一个简单的json文件:

{
             "id": 1,
             "url": "someUrl",
            "question": "What is the name?",
        "answer": [
            {
                "a": {
                    "text": "Back to the A",
                    "status": 0
                }
            }
}

我能够用以下代码解析所有这些数据到我的xcode项目:

NSData* myData = [NSData dataWithContentsOfURL:
                        [NSURL URLWithString:@"http://myWebsite.net/json/myValidjson.json"]
                        ];
    NSDictionary* json = nil;
    if (myData) {
        json = [NSJSONSerialization
                JSONObjectWithData:myData
                options:kNilOptions
                error:nil];
    }

之后,下面代码的值:

json[@"movies"][0][@"answer"][0][@"a"][@"status"]; 

是0,到目前为止我还好。

现在当我试着比较

if (json[@"movies"][0][@"answer"][0][@"a"][@"status"] == 0) {
    NSLog("Value is Equal.");
}

这个capison应该是真的,因为json[@"movies"][0][@"answer"][0][@"a"][@"status"]的值是0,但实际上它是一个id,而不是一个整数。因此,比较结果输出false。

为什么我得到这个结果?这个的解是什么才能让"IF"条件为真?

由于您只能在NSDictionaryNSArray中存储对象,因此您不能直接放入或获取这样的整数。这就是NSNumber类被发明的目的。在解析JSON时,每当解析器遇到一个数字时,它就用正确的值实例化一个NSNumber。如果你想要一个整数,你可以这样做:

if ([json[@"movies"][0][@"answer"][0][@"a"][@"status"] intValue] == 0)

或者直接比较对象:

if ([json[@"movies"][0][@"answer"][0][@"a"][@"status"] isEqual:@0])

最新更新