0

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

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

为什么我会得到这个结果?解决方案是什么,以便我可以使“如果”条件为真?

4

1 回答 1

3

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

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

或者直接比较对象:

if ([json[@"movies"][0][@"answer"][0][@"a"][@"status"] isEqual:@0])
于 2012-12-29T21:44:26.477 回答