使用Swift从JSON数据中的数组中获取数据

时间:2015-04-18 20:09:52

标签: json swift

我正在使用http://api.zippopotam.us将邮政编码数据转换为城市和州。我能够轻松地撤出这个国家,但“地名”(城市)和“州名缩写”给我带来了问题。这是代码:

var url = NSURL(string: "http://api.zippopotam.us/us/90210")

let task = NSURLSession.sharedSession().dataTaskWithURL(url!, completionHandler: {(data, response, error) -> Void in

let jsonResult = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers, error: nil) as! NSDictionary

        var placeDictionary = jsonResult["places"]! as? NSArray

        println(placeDictionary) // this works

        var name: String? = jsonResult[0]!.valueForKey("place name") as? String

        println(name) // this doesn't. 

})

task.resume()

我收到了一个错误:

  

在打开可选值时意外发现nil

2 个答案:

答案 0 :(得分:3)

看看清理过的JSON:

{
   "post code":"90210",
   "country":"United States",
   "country abbreviation":"US",
   "places":[
      {
         "place name":"Beverly Hills",
         "longitude":"-118.4065",
         "state":"California",
         "state abbreviation":"CA",
         "latitude":"34.0901"
      }
   ]
}

该数组不直接在JSON中;要到达那里,您必须访问places密钥。

您已使用placeDictionary完成此操作(应该是placeArray)。由于您已保存该数组,因此可以访问该数组( 词典)及其各自的词典。

所以,要获得第一个名字,你可以使用它:

if let placeName: String = (placeDictionary[0] as! NSDictionary).valueForKey("place name") as? String {
    println(placeName)
}

答案 1 :(得分:1)

如果您经常使用JSON,SwiftyJSON值得一试。它简化了JSON的处理,因为Apple没有给我们一个好的JSON API。