目标 - C:如何阅读json?

时间:2011-10-17 13:24:44

标签: objective-c json

  

可能重复:
  How to parse JSON in Objective-C?

我对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"]);
}

2 个答案:

答案 0 :(得分:1)

如果您的目标是iOS 5或OS X v10.7,那么您可以使用Apple自己的NSJSONSerialization。您可能特别想要+JSONObjectWithData:options:error:。使用内置的东西总是比第三方选项更好,因为它消除了第三方没有直接兴趣修复其错误的问题,并且无需干预就无法为您的应用程序提供修复。

如果你想支持旧设备,那么你可能想要导入SBJSON - 就像Rengers建议的那样 - 或者其他任何一个。由于上述原因,我强烈建议您仅在NSJSONSerialization不可用时再使用。

编辑:看来你已经有了SBJSON,并询问如何遍历结果?从阅读JSON:

  • 根对象将是字典
  • 在其中,行将是一个字典数组
  • 每个字典都有一个名为elements
  • 的数组
  • 该数组中的每个条目都是字典
  • 其中,距离是另一个字典
  • distance包含两个字符串,键为“text”和“value”

因此,如果您根本不进行任何验证,请访问距离字典:

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。然后使用普通的字典和数组方法来访问数据。