我正在使用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
答案 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。