Swift2 JSON解析多个词典

时间:2015-11-10 14:37:59

标签: json parsing swift2

我已成功阅读以下网站的数据:http://free.currencyconverterapi.com/api/v3/countries。我可以在调试窗口中看到这些值。但是,我无法迭代这些项目。有超过200个项目,我想迭代它们并打印出它们的值(名称,货币名称,ID等)。

读取数据的代码:

func countryList() {
    // Do any additional setup after loading the view.
    let jsonUrl = "http://free.currencyconverterapi.com/api/v3/countries"

    let session = NSURLSession.sharedSession()
    let shotsUrl = NSURL(string: jsonUrl)

    let task = session.dataTaskWithURL(shotsUrl!) {
        (data, response, error) -> Void in

        do {
            let jsonData = try NSJSONSerialization.JSONObjectWithData(data!, options:NSJSONReadingOptions.MutableContainers ) as! NSDictionary

            //let results: [String:[String:[String]]] = jsonData["results"]! as! [String : [String : [String]]]
            let results = jsonData["results"]!

            // iterate all items and print values
            // how ???
        } catch _ {
            // Error
        }
    }

    task.resume()
}

我尝试了以下内容:let results : [String:[String:[String]]] = jsonData["results"]!但是这不起作用,如果确实如此,我会感到惊讶:)。

任何指针?

使用Xcode 7.1和Swift 2

使用JSON(示例)返回的结果数据:

Country & Currency List{
"results":{
    "GQ":{
            "currencyId":"GQE",
            "currencyName":"Central African CFA franc",
            "name":"Equatorial Guinea",
            "alpha3":"GNQ",
            "id":"GQ"
        },
    "TD":{
            "currencyId":"XAF",
            "currencyName":"Central African CFA franc",
            "name":"Chad",
            "alpha3":"TCD",
            "id":"TD"
        }
    .
    .
    .

1 个答案:

答案 0 :(得分:0)

key results的值是一个字典,可以使用简单的for .. in循环进行枚举。
countrycode是关键,info是值。

将字典向下转换为[String:AnyObject]包括所有形式的嵌套对象。

此代码打印出国家/地区代码和每个项目的名称

do {
    let jsonData = try NSJSONSerialization.JSONObjectWithData(data!, options:NSJSONReadingOptions.MutableContainers ) as! [String:AnyObject]
    let results = jsonData["results"] as! [String:AnyObject]

    for (countryCode, info) in results {
      print(countryCode, info["name"] as! String)
    }
  } 

请注意,没有顺序,因为字典按定义无序排序