2017-07-21 118 views
1

我JSON如何迭代具有嵌套字典的字典数组?

http://maps.googleapis.com/maps/api/directions/json?&origin=28.594517,77.049112&destination=28.654109,77.34395&travelMode=DRIVING&provideRouteAlternatives=false&sensor=false

我要访问在距离这步的所有值。

这里是我的代码

class Router { 
var getValue = Double() 

func downloadData(complete: downloadComplete) { 

    let currentURL = URL(string:getURL)! 
    Alamofire.request(currentURL).responseJSON { (responseJSON) in 
     let result = responseJSON 
     //   print(result) 

     if let dict = result.value as? Dictionary<String,AnyObject>{ 

      if let routes = dict["routes"] as? [Dictionary<String, AnyObject>]{ 

       if let legs = routes[0]["legs"] as? [Dictionary<String, AnyObject>]{ 

        if let steps = legs[0]["steps"] as? [Dictionary<String, AnyObject>]{ 

         for index in steps{ 
          if let distance = steps["distance"] as? Dictionary<String,AnyObject>{ 
           if let value = distance["value"] as? Double{ 
            self.getValue = self.getValue + value 
            print(self.getValue) 
           } 
          } 
         } 
        } 
       } 
      } 
     } 
    } 
    complete() 

} 

我在收到错误:

if let distance = steps["distance"] as? Dictionary<String,AnyObject>{ 

它说:

无法下标类型 '[解释]' 与一个值字符串索引

我该如何访问?

回答

2

您试图通过键访问字典数组的值。您应该将steps["distance"]更改为index["distance"]

if let distance = index["distance"] as? Dictionary<String,AnyObject>{ 
    if let value = distance["value"] as? Double{ 
     self.getValue = self.getValue + value 
     print(self.getValue) 
    } 
} 
0

错误很明显。 steps [“distance”]是一个字典数组,可以像步骤[0],步骤[1]那样访问。 你需要下面一行

if let distance = steps["distance"] as? Dictionary<String,AnyObject> 

更改为

if let distance = index["distance"] as? Dictionary<String,AnyObject>