Cocoa:JSON返回的整数值是id不是int,如何输入转换成整数?

时间:2012-12-29 21:41:25

标签: json cocoa

我有一个简单的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.");
}

这个比较应该是正确的,因为json [@“movies”] [0] [@“answer”] [0] [@“a”] [@“status”]的值为0但实际上是一个id,而不是一个整数。因此,比较输出错误。

为什么我得到这个结果?这将是什么解决方案,以便我可以让“IF”条件成立?

1 个答案:

答案 0 :(得分:3)

由于您只能在NSDictionaryNSArray中存储对象,因此您无法直接输入或获取类似的整数。这就是NSNumber课程的发明。在解析JSON时,解析器在遇到数字时,会使用适当的值实例化NSNumber。如果你期望一个整数,你可以做你想做的事情:

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

或直接比较对象:

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