如何修复错误:此代码中"Expected to decode Dictionary<String, Any> but found an array instead"?


import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
    super.viewDidLoad()
    //API Key: 5ca10b2d20a545099a108a3aeceb329c
    //url: https://newsapi.org/v2/top-headlines?country=us&apiKey=5ca10b2d20a545099a108a3aeceb329c

    // model
    struct Source: Decodable {
        var id: String
        var name: String
    }
    struct Articles: Decodable {
        var source: Source
        var author: String
        var title: String
        var description: String
        var url: String
        var urlToImage: String
        var publishedAt: String
        var content: String
    }
    struct JSONDescription: Decodable {
        var status: String
        var totalResults: Int
        var articles: Articles
    }

    guard let url = URL(string: "https://newsapi.org/v2/top-headlines?country=us&apiKey=5ca10b2d20a545099a108a3aeceb329c") else { return }

    URLSession.shared.dataTask(with: url) { data, response, error in
        guard let data = data else { return }
        //let dataAsString = String(data: data, encoding: .utf8)
//            print(dataAsString)
        do {
        let jsonDescription = try JSONDecoder().decode(JSONDescription.self, from: data)
            print(jsonDescription.totalResults)
        }
        catch let jsonError {
            print("Json Error:", jsonError)
        }
}.resume()
}
}

我希望看到的是这里返回的JSON数据:https://newsapi.org/v2/top-headlines?country=us&apiKey=5ca10b2d20a545099a108a3aeceb329c

你可以把它放进这个格式化程序中,使它是可读的:https://jsonformatter.curiousconcept.com

以为我做的一切都是正确的。我构建的模型是不是错了?我不确定如何解决此错误。

因此,借助返回的错误并查看数据,似乎"文章"是一个数组。

这是我尝试的:

  • Articles结构重命名为 Article
  • 将 JSON 描述的articles属性从 Articles 更改为[Article]

我没有注意到数据映射中的任何其他错误,但希望这能让您更接近。

相关内容

最新更新