无法从链接解析JSON-没有错误,但是该函数在尝试访问URL后返回

时间:2019-05-07 17:17:42

标签: json swift parsing

我是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”是唯一显示的打印件。 我的问题是什么?

1 个答案:

答案 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 
}