我有一个简单的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”条件成立?
答案 0 :(得分:3)
由于您只能在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])