在 Xcode 8 和 Swift 3 里 id 現(xiàn)在作為 Any 引入而不是 AnyObject
這表示 JSONSerialization.jsonObject(with: data) 返回 Any。所以需要把 json data 轉(zhuǎn)換為特定類型,比如[String:Any]。json 接下來的字段也需要這么做。
var jsonString = "{" +
"\"Language\": {" +
"\"Field\":[" +
"{" +
"\"Number\":\"976\"," +
"\"Name\":\"Test1\"" +
"}," +
"{" +
"\"Number\":\"977\"," +
"\"Name\":\"Test2\"" +
"}" +
"]" +
"}" +
"}"
var data = jsonString.data(using: .utf8)!
if let parsedData = try? JSONSerialization.jsonObject(with: data) as! [String:Any] {
let language = parsedData["Language"] as! [String:Any]
print(language)
let field = language["Field"] as! [[String:Any]]
let name = field[0]["Name"]!
print(name) // ==> Test1
}
實際中你應(yīng)該想要 json 深處特定的字段。就假設(shè)是 Field 數(shù)組的第一個元素 Name 字段??梢杂靡淮归_來安全的訪問字段,就像這樣:
var data = jsonString.data(using: .utf8)!
if let json = try? JSONSerialization.jsonObject(with: data) as? [String:Any],
let language = json?["Language"] as? [String:Any],
let field = language["Field"] as? [[String:Any]],
let name = field[0]["Name"] as? String, field.count > 0 {
print(name) // ==> Test1
} else {
print("bad json - do some recovery")
}
參考:蘋果Swift 博客 Working with JSON in Swift