我是Swift的新手,并通过以下教程尝试基本的JSON解析。我想打印JSON文件的字段,但是不起作用。
尽管该链接存在,并且我使用的是与上一个教程相同的链接,但它返回而不是继续访问JSON。
我知道在Swift4中使用解码器可以更轻松地完成此操作,但是当我这样做时会收到错误消息。
这是我正在使用的结构:
struct Tester {
var userId: Int
var id: Int
var title: String
var body: String
init(json: [String: Any]){
userId = json["userId"] as? Int ?? -10
id = json["id"] as? Int ?? -400
title = json["title"] as? String ?? ""
body = json["body"] as? String ?? ""
}
}
这是尝试访问JSON条目的代码
@IBAction func printIDTitle(_ sender: Any) {
guard let url = URL(string: "https://jsonplaceholder.typicode.com/posts") else { return }
let session = URLSession.shared
session.dataTask(with: url) { (data, response, error) in
if let response = response {
print(response)
}
guard let data = data else { return }
do {
print("here 0\n")
guard let json = try JSONSerialization.jsonObject(with: data, options: .mutableContainers) as? [String: Any] else {
print(error)
return
}
print("here 0.5\n")
print("here 1\n")
let d = Tester(json: json)
print(d.id)
print(d.title)
print("here 2\n")
} catch let error {
print(error)
}
}.resume()
}
“此处为0”是唯一显示的打印件。 我的问题是什么?
答案 0 :(得分:0)
根是一个数组,所以要更改
guard let json = try JSONSerialization.jsonObject(with: data, options:[]) as? [[String: Any]] else {
print(error)
return
}
更好
let res = try! JSONDecoder().decode([Root].self, from:data)
struct Root: Codable {
let userId, id: Int
let title, body: String
}