我对Objective c全新,我需要距离谷歌距离矩阵json的距离值,但是我可以从json得到的数据只是第一个元素, 所以如何获得距离这个json的价值?
{
"destination_addresses": [
"San Francisco, Californie, États-Unis",
"Victoria, BC, Canada"
],
"origin_addresses": [
"Vancouver, BC, Canada",
"Seattle, État de Washington, États-Unis"
],
"rows": [
{
"elements": [
{
"distance": {
"text": "1 732 km",
"value": 1732128
},
"duration": {
"text": "3 jours 23 heures",
"value": 340902
},
"status": "OK"
}
]
}
],
"status": "OK"
}
好的,这是我的示例代码,仅遵循JSON教程:
我已经使用了SBJSON,但我只能使用行键,那么如何在距离键中获得值?
SBJSON *parser = [[SBJSON alloc] init];
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL
URLWithString:@"http://maps.googleapis.com/maps/api/distancematrix/json?origins=Vancouver+BC|Seattle&destinations=San+Francisco|Victoria+BC&mode=bicycling&language=fr-FR&sensor=false"]];
// Perform request and get JSON back as a NSData object
NSData *response = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
NSString *json_string = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
NSArray *statuses = [parser objectWithString:json_string error:nil];
for (NSDictionary *status in statuses)
{
NSLog(@"%@ - %@", [status objectForKey:@"rows"]);
}
答案 0 :(得分:1)
如果您的目标是iOS 5或OS X v10.7,那么您可以使用Apple自己的NSJSONSerialization
。您可能特别想要+JSONObjectWithData:options:error:
。使用内置的东西总是比第三方选项更好,因为它消除了第三方没有直接兴趣修复其错误的问题,并且无需干预就无法为您的应用程序提供修复。
如果你想支持旧设备,那么你可能想要导入SBJSON - 就像Rengers建议的那样 - 或者其他任何一个。由于上述原因,我强烈建议您仅在NSJSONSerialization
不可用时再使用。
因此,如果您根本不进行任何验证,请访问距离字典:
NSDictionary *result = [parser objectWithString:...];
NSLog(@"distance dictionary is: %@"
[[[[[
result objectForKey:@"rows"]
objectAtIndex:0]
objectForKey:@"elements"]
objectAtIndex:0]
objectForKey:@"distance"]
);
根据您的示例代码,您可能实际上正在获取已发布的各种字典数组,而不是直接获取字典。如果是这样的话,显然会适应。
答案 1 :(得分:0)
您需要使用SBJSON之类的JSON解析器。这将创建一个包含所有值和键的NSDictionary / NSArray。然后使用普通的字典和数组方法来访问数据。