使用多个对象解析JSON响应

时间:2012-01-26 01:33:49

标签: ios json

我有一个关于在iOS5中解析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];

我想知道是否有人可能更好地了解我应该如何以更优雅的方式做这件事?

提前多多感谢!

1 个答案:

答案 0 :(得分:3)

你不能仅仅将它用作JSON对象,因为它将作为JSON(普通字符串)工作,你需要解析它,以便你可以这样做直接转到路径

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

现在您可以从“arr”数组

访问路径数据

<强>更新

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

因为要素元素是一个数组所以遍历数组首先转到它的元素