我正在尝试使用 swift 4 解析 json,请告诉我它有什么问题?

MALIKK HABIB UR REHMAN

我正在尝试使用以下方法解析 JSON,但 XCode 在我声明 "data" 时给了我一个错误。

我是新来的,我不明白什么是错的。请帮我。

import UIKit

struct Contacts: Decodable {

    let id: Int
    let name: String
    let email: String

}

class ViewController: UIViewController {

    override func viewDidLoad()
    {
        super.viewDidLoad()

        let urlString = "https://api.androidhive.info/contacts/"
        guard let url = URL(string: urlString) else {return}

        URLSession.shared.dataTask(with: url) { (data, response, error) in
        }

        guard let data = data  else {return}
        //let datastring = String(data: data, encoding: .utf8)

        do
        {
            let contact = try JSONDecoder().decode([Contacts].self, from: data)
            print(contact.name)

        } catch let jsonErr {
            print("Error deserializing json:", jsonErr)
        }
    }
}
瓦迪安

三大问题。

  1. 您忽略了根对象,它是包含contacts数组的字典
  2. key 的值idString,不是Int
    一个硬性规则是:双引号中的所有内容都是String偶数"12""false"
  3. 您必须恢复任务并将用于解析 JSON 的代码放入完成处理程序中。

struct Root : Decodable {

    let contacts : [Contact]
}

struct Contact : Decodable { // It's recommended to name this kind of struct in singular form

    let id, name, email: String
}

...

override func viewDidLoad()
{
    super.viewDidLoad()

    let urlString = "https://api.androidhive.info/contacts/"
    guard let url = URL(string: urlString) else {return}

    URLSession.shared.dataTask(with: url) { (data, response, error) in
       if let error = error { print(error); return }

       do {
          let result = try JSONDecoder().decode(Root.self, from: data!)
          let contacts = result.contacts
          for contact in contacts {
              print(contact.name)
          }

       } catch {
           print("Error deserializing json:", error)
       }

    }.resume()
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章