2012-01-26 108 views
0

我有一个关于在iOS5中解析JSON响应的问题。解析多个对象的JSON响应

目前,我正在关注this指南,以帮助我解析从第三方映射服务返回的JSON响应。

一切正常,但由第三方服务器返回的JSON响应与指南本身显示的响应有所不同。

简而言之,整个JSON响应的整体结构看起来是这样的:

{ 
    "directions": [....], 
    "messages": [....], 
    "routes": 
     { 
      "features": [ 
       { 
        "attributes": {....}, 
        "geometry": 
         { 
          "paths": [....] 
         } 
       } 
      ] 
     } 
} 

This是实际的JSON查询网址。

通过使用此行代码,

NSDictionary * jsonResponse = [NSJSONSerialization JSONObjectWithData:responseData options:kNilOptions error:&error]; 

我能够成功地获得jsonResponse字典报告,它有3个键/值对的,但我的最终目标是获取存储在“数组routes.features.geometry.paths'。

这是我当前的代码块得到的最后一组阵列值:

NSDictionary * jsonResponse = [NSJSONSerialization JSONObjectWithData:responseData options:kNilOptions error:&error]; 

NSArray * jsonArray = [jsonResponse valueForKeyPath:@"routes.features.geometry.paths"]; 

jsonArray = [jsonArray objectAtIndex:0]; 
jsonArray = [jsonArray objectAtIndex:0]; 

我想知道是否有人可能的,我应该如何去在一个更优雅的方式做这更好的主意吗?

非常感谢!

回答

3

你不能只把它作为JSON对象,因为它会工作作为JSON(纯字符串),你需要分析它,你的问题,你可以像这样直接去路径

NSArray *arr = [[[[jsonResponse objectForKey:@"routes"] objectForKey:@"features"] objectForKey:@"geometry"] objectForKey:@"paths"]; 

现在,您可以从 “ARR” 阵列访问路径数据

UPDATE:

NSArray *arr = [[[[[jsonResponse objectForKey:@"routes"] objectForKey:@"features"] objectAtIndex:0] objectForKey:@"geometry"] objectForKey:@"paths"]; 

为特征元素是阿拉的Ÿ所以遍历数组第一则跳转至其元素

+0

不幸的是,当我这样做,我得到一个错误: ***终止应用程序由于未捕获的异常“NSInvalidArgumentException”,原因是:“ - [__ NSCFArray objectForKey:]:无法识别选择器发送到实例0xa0ce660' – Earthling

+0

[[[[[jsonResponse objectForKey:@“routes”] objectForKey:@“features”] objectAtIndex:0] objectForKey:@“geometry”] objectForKey:@“paths”];这将运行我猜,因为我再次看到JSON和你的“功能”节点包含一个数组,然后遍历到词典。 –

+0

检查json是否有字典或数组的快速注释,如果您遇到此字符“[”,而且该元素之外的任何元素都将作为数组遍历,并且如果您发现元素之外的任何元素为“{”,将以字典 –