无法从表视图中的 URL 解析 JSON



我正在尝试从以下API中提取汽车信息。但我似乎无法在我的表格视图中显示信息......感谢任何和所有的帮助!

视图控制器

var hondaList: [HondaModel] = []
override func viewDidLoad() {
    //let jsonUrl = "https://api.myjson.com/bins/149ex5"
    let url = URL(string: "https://api.myjson.com/bins/149ex5")
    URLSession.shared.dataTask(with: url!) { (data, urlrespone , error) in
        do{
            try self.hondaList = JSONDecoder().decode([HondaModel].self, from: data!)
            for honda in self.hondaList {
                print(honda.name)
            }
            DispatchQueue.main.async {
                self.tableView.reloadData()
            }
        } catch{  
            print( "Error in fectching from https://api.myjson.com/bins/149ex5")
        }
    }.resume()
    super.viewDidLoad()

}

import Foundation
struct HondaModel: Decodable {
    let name: String
    let engine: String
    let transmission: String
    let ocolor: String
    let icolor: String
    let vin: String
}

这是一个非常常见的错误:您忽略了根对象(以及两个可能的错误(

添加此结构

struct Root : Decodable {  
    private enum CodingKeys: String, CodingKey { case results = "Results", message = "Message" }
    let results : [HondaModel]
    let message : String
}

和解码

if let error = error { print(error); return }
do {
    let root = try JSONDecoder().decode(Root.self, from: data!)
    self.hondaList = root.results
...  

请,请打印error而不是毫无意义的文字字符串。该错误会告诉您出了什么问题。

catch {
   print(error)
}

在您的情况下,您会得到

"本以为会解码Array<Any>,却找到了一本字典。">

这是一个非常重要的提示。

试试这个

 if let resultJSON = data?["Results"] as? [[String: Any]] {
                                                    do {
                                                        let _data = try JSONSerialization.data(withJSONObject: resultJSON, options: .prettyPrinted)
                                                        self.hondaList = try JSONDecoder().decode([HondaModel].self, from: _data)
                                                       // … same thing
           }
 } 

相关内容

  • 没有找到相关文章

最新更新