2011-10-17 62 views
-1

可能重复:
How to parse JSON in Objective-C?Objective - C:如何阅读json?

我目标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

你到目前为止尝试过哪些代码? –

+0

请再检查一次!我发布了一些示例代码! – user999218

回答

0

您需要使用JSON解析器,如SBJSON。这将创建一个包含所有值和键的NSDictionary/NSArray。然后使用正常的字典和数组方法来访问数据。

1

如果你的目标是iOS 5或OS X v10.7,那么你可以使用苹果自己的NSJSONSerialization。你可能特别想要+JSONObjectWithData:options:error:。使用内置的东西总是比第三方的选择更可取,因为它消除了第三方没有直接的利益来修复它的错误,也没有办法在没有您的干预的情况下为您的应用程序提供修复。

如果你想支持较旧的设备,那么你可能想要导入SBJSON--就像Rengers所说的那样 - 或者其他任何一个。由于上述原因,我强烈建议你只有在NSJSONSerialization不可用的情况下才会回退。

编辑:它看起来你已经有SBJSON的地方,并询问如何遍历结果?通过阅读JSON:

  • 根对象将是一个字典
  • 内它,行将是字典的阵列
  • 每个字典具有阵列命名的元素
  • 该阵列中的每个条目是字典
  • 内的,距离为另一字典
  • 距离包含两个串,与键“文本”和“值”

所以,如果你没有做任何验证可言,才能到距离词典中,你可以做:

NSDictionary *result = [parser objectWithString:...]; 

NSLog(@"distance dictionary is: %@" 
    [[[[[ 
     result objectForKey:@"rows"] 
     objectAtIndex:0] 
      objectForKey:@"elements"] 
      objectAtIndex:0] 
       objectForKey:@"distance"] 
); 

根据您的示例代码,它看起来像你实际上可能会得到的数组直接发布各种字典而不是字典。如果是这样的话,显然会适应。

+0

请再检查一次!我发布了一些示例代码! – user999218