解码JSON时出错。类型不匹配(Swift.Array<;Any>;,Swift.DecodingError

解码JSON时出错。类型不匹配(Swift.Array<;Any>;,Swift.DecodingError,json,swift,codable,Json,Swift,Codable,我在JSON解码方面遇到了问题。我理解错误发生的原因,但不知道如何修复它。错误很可能位于model.model(从quicktype.io获得)中的某个额外方括号中 import Combine import SwiftUI class NewsAPI: ObservableObject { @Published var articles: Articles = [Article]() func loadNews() { guard let url: URL

我在JSON解码方面遇到了问题。我理解错误发生的原因,但不知道如何修复它。错误很可能位于model.model(从quicktype.io获得)中的某个额外方括号中

import Combine
import SwiftUI

class NewsAPI: ObservableObject {

    @Published var articles: Articles = [Article]()

    func loadNews() {
        guard let url: URL = URL(string: "https://newsapi.org/v2/top-headlines?country=ru&category=technology&apiKey=376a97643c6c4633afe57427b71e8ebd") else { return }
        URLSession.shared.dataTask(with: url) { (data, response, error) in
            do {
                guard let json = data else { return }
                let swift = try JSONDecoder().decode(Articles.self, from: json)
                DispatchQueue.main.async {
                    self.articles = swift
                }
            }
            catch {
                print(error)
            }
        }
        .resume()
    }
}

import Foundation

public typealias Articles = [Article]

public struct Welcome: Codable, Hashable {
    public let status: String?
    public let totalResults: Int?
    public let articles: [Article]?

    public init(status: String?, totalResults: Int?, articles: [Article]?) {
        self.status = status
        self.totalResults = totalResults
        self.articles = articles
    }
}

public struct Article: Codable, Hashable {
    public let source: Source?
    public let author: String?
    public let title: String?
    public let articleDescription: String?
    public let url: String?
    public let urlToImage: String?
    public let publishedAt: Date?
    public let content: String?

    enum CodingKeys: String, CodingKey {
        case source, author, title
        case articleDescription
        case url, urlToImage, publishedAt, content
    }

    public init(source: Source?, author: String?, title: String?, articleDescription: String?, url: String?, urlToImage: String?, publishedAt: Date?, content: String?) {
        self.source = source
        self.author = author
        self.title = title
        self.articleDescription = articleDescription
        self.url = url
        self.urlToImage = urlToImage
        self.publishedAt = publishedAt
        self.content = content
    }
}

public struct Source: Codable, Hashable {
    public let id: String?
    public let name: String?

    public init(id: String?, name: String?) {
        self.id = id
        self.name = name
    }
}

publishedAt
类型从
Date
更改为
String

public let publishedAt: String?
并更新
解码
代码如下

let welcome = try JSONDecoder().decode(Welcome.self, from: json)
DispatchQueue.main.async {
    self.articles = welcome.articles
}