我有一个简单的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"条件为真?
由于您只能在NSDictionary
和NSArray
中存储对象,因此您不能直接放入或获取这样的整数。这就是NSNumber
类被发明的目的。在解析JSON时,每当解析器遇到一个数字时,它就用正确的值实例化一个NSNumber
。如果你想要一个整数,你可以这样做:
if ([json[@"movies"][0][@"answer"][0][@"a"][@"status"] intValue] == 0)
或者直接比较对象:
if ([json[@"movies"][0][@"answer"][0][@"a"][@"status"] isEqual:@0])