2015-11-10 2 views
0

Я успешно прочитал данные со следующего сайта: http://free.currencyconverterapi.com/api/v3/countries. Я вижу значения в окне отладки. Однако я не могу перебирать элементы. Есть более чем 200 пунктов, и я хотел бы, чтобы перебирать их и распечатывать их значение (имя, название валюты, удостоверение личности, и т.д. ...)Swift2 JSON Разбор с несколькими словарями

Код для чтения данных:

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" 
     } 
    . 
    . 
    . 

ответ

0

Значение ключа results является словарь, то можно перечислить с простым for .. in цикла.
countrycode является ключом, info значение.

Downcasting словарь для [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) 
    } 
    } 

Имейте в виду, что нет никакого порядка, так как словарь неупорядоченный по определению

+0

Спасибо. Мой Бернесе Джесс также благодарит вас :) – oyalhi

Смежные вопросы