Swift.DecodingError.Context

Swift.DecodingError.Context,swift,codable,Swift,Codable,我正在从URL repsonse中解码JSON(解码器)字符串,如下所示,并在解码过程中获取get,其中包含以下错误消息: 错误: 类型不匹配(Swift.String,Swift.DecodingError.Context(编码路径:[U JSONKey(stringValue:“索引0”,intValue:0),编码键(stringValue:“标记”,intValue:nil),[U JSONKey(stringValue:“索引0”,intValue:0)],调试说明:“预期解码字符串,

我正在从URL repsonse中解码JSON(解码器)字符串,如下所示,并在解码过程中获取get,其中包含以下错误消息:

错误:

类型不匹配(Swift.String,Swift.DecodingError.Context(编码路径:[U JSONKey(stringValue:“索引0”,intValue:0),编码键(stringValue:“标记”,intValue:nil),[U JSONKey(stringValue:“索引0”,intValue:0)],调试说明:“预期解码字符串,但找到了一个数字。”,UnderlineingError:nil)

结构:

struct Wordpress: Codable {
    let id: Int?
    let date: String?
    let date_gmt: String?
    let guid: GUID?
    let modified: String?
    let modified_gmt: String?
    let slug: String?
    let status: String?
    let type: String?
    let link: String?
    let title: Title?
    let content: Content?
    let excerpt: Excerpt?
    let author: Int?
    let featured_media: Int?
    let comment_status: String?
    let ping_status: String?
    let sticky: Bool?
    let template: String?
    let format: String?
    let meta: [String]?
    let categories: [Int]?
    let tags: [String]?
    let _links: Link?

    enum CodingKeys: String, CodingKey {
        case id = "id"
        case date = "date"
        case date_gmt = "date_gmt"
        case guid = "guid"
        case modified = "modified"
        case modified_gmt = "modified_gmt"
        case slug = "slug"
        case status = "status"
        case type = "type"
        case link = "link"
        case title = "title"
        case content = "content"
        case excerpt = "excerpt"
        case author = "author"
        case featured_media = "featured_media"
        case comment_status = "comment_status"
        case ping_status = "ping_status"
        case sticky = "sticky"
        case template = "template"
        case format = "format"
        case meta = "meta"
        case categories = "categories"
        case tags = "tags"
        case _links = "_links"
    }
}

struct GUID: Codable{
    let rendered: String?
}

struct Title: Codable{
    let rendered: String?
}

struct Content: Codable{
    let rendered: String?
    let protected: Bool?
}

struct Excerpt: Codable{
    let rendered: String?
    let protected: Bool?
}

struct Link: Codable {
    let urls: [URLString]?
    let collection: [Collection]?
    let about: [About]?
    let author: [Author]?
    let replies: [Replies]?
    let versionHistory: [Version]?
    let predecessorVersion: [Predecessor]?
    let wpFeaturedmedia: [Featured]?
    let wpAttachment: [Attachment]?
    let wpTerm: [Term]?
    let curies: [Curies]?

    enum CodingKeys: String, CodingKey {
        case urls = "urls"
        case collection = "collection"
        case about = "about"
        case author = "author"
        case replies = "replies"
        case versionHistory = "version-history"
        case predecessorVersion = "predecessor-version"
        case wpFeaturedmedia = "wp:featuredmedia"
        case wpAttachment = "wp:attachment"
        case wpTerm = "wp:term"
        case curies = "curies"
    }
}

struct About: Codable{
    let href : String?
}

struct Author: Codable {
    let embeddable: Bool?
    let href : String?
}

struct Replies: Codable {
    let embeddable: Bool?
    let href : String?
}

struct Version: Codable {
    let count: Int?
    let href : String?
}

struct Predecessor: Codable {
    let id: Int?
    let href : String?
}
struct Featured: Codable {
    let embeddable: Bool?
    let href : String?
}

struct Attachment: Codable{
    let href : String?
}

struct Term: Codable {
    let taxonomy: String?
    let embeddable: Bool?
    let href: String?
}

struct Curies: Codable {
    let name: String?
    let href: String?
    let templated: Bool?
}
我的解码代码:

class func path_getPosts(per_page:Int) -> URL {
        let s = APIwp.base + APIwp.posts + APIwp.per_page + "\(per_page)"
        print(s)
            return URL(string: s)!

        }


    static func getPosts(for per_page: Int, completion: @escaping ([Wordpress], Error?) -> Void) {
        taskGetPosts(url: path_getPosts(per_page: per_page), responseType: [Wordpress].self) { (response, error) in
                if let response = response {
                    completion(response, nil)
                } else {
                    completion([], error)
                }
            }
        }

    @discardableResult static func taskGetPosts<ResponseType: Decodable>(url: URL, responseType: ResponseType.Type, completion: @escaping (ResponseType?, Error?) -> Void) -> URLSessionDataTask {
        let task = URLSession.shared.dataTask(with: url) { (data, response, error)
            in
            guard let data = data else {
                DispatchQueue.main.async {
                    completion(nil, error)
                }
            return
            }

            let decoder = JSONDecoder()
            do {
                let responseObject = try decoder.decode(ResponseType.self, from: data)
                DispatchQueue.main.async { completion(responseObject, nil) }
            } catch let jsonErr {
                print("Error:=: \(jsonErr)")
                DispatchQueue.main.async { completion(nil, error) }
            }
        }
        task.resume()
        return task
    }
class func path\u getPosts(每页:Int)->URL{
设s=APIwp.base+APIwp.posts+APIwp.per\u page+“\(per\u page)”
印刷品
返回URL(字符串:s)!
}
静态func getPosts(对于每页:Int,完成:@escaping([Wordpress],Error?)->Void){
taskGetPosts(url:path\u getPosts(per\u page:per\u page),responseType:[Wordpress].self){(response,error)在中
如果让响应=响应{
完成(回应,无)
}否则{
完成([],错误)
}
}
}
@discardableResult静态func taskGetPosts(url:url,responseType:responseType.Type,completion:@escaping(responseType?,Error?)->Void)->URLSessionDataTask{
让task=URLSession.shared.dataTask(带:url){(数据、响应、错误)
在里面
guard let data=其他数据{
DispatchQueue.main.async{
完成(无,错误)
}
回来
}
let decoder=JSONDecoder()
做{
让responseObject=try decoder.decode(ResponseType.self,from:data)
DispatchQueue.main.async{completion(responseObject,nil)}
}接球手{
打印(“错误:=:\(JSONER)”)
DispatchQueue.main.async{完成(无,错误)}
}
}
task.resume()
返回任务
}

请仔细阅读错误消息

它告诉您,key
标记数组中的第一项(
)是根对象的第一项(
编码键(stringValue:“tags”,intValue:nil)
不是字符串,它是一个数字(
需要解码字符串,但找到了一个数字)


因此,
标签
可能是
[Int]

请仔细阅读错误消息

它告诉您,key
标记数组中的第一项(
)是根对象的第一项(
编码键(stringValue:“tags”,intValue:nil)
不是字符串,它是一个数字(
需要解码字符串,但找到了一个数字)


因此,
标记
可能是
[Int]

显示您试图解析的json?它说的是
让标记:[String]?
不是字符串…它们是数字…您的codable试图将标记的值解析为字符串数组,但实际的标记是Int(number)数组。因此,您可能必须将标记类型转换为字符串数组。显示您正在尝试解析的json?它的意思是
let tags:[string]?
不是字符串…它们是数字…您的代码表正在尝试将标记值解析为字符串数组,但实际的标记是int(number)数组。因此,您可能必须将标记类型转换为字符串数组。