Ios 快速可解码罐';t使用单个根元素进行解码

Ios 快速可解码罐';t使用单个根元素进行解码,ios,json,swift,Ios,Json,Swift,我很难用swift可解码协议解码。我有一个RESTAPI,它返回以下JSON { 数据:[ { 身份证号码:17, 状态:“已发布”, 创建人:{ 身份证号码:1 }, 创建于:“2020-01-13 17:38:31”, 标题:“Lorem ipsum dolor sit amet,Concertetur adi”, 内容:"毛里斯舌苔和舌苔是生命之门。毛里斯弓形面。粗糙的鼻梁和舌苔。Morbi porttitor,est sodales tristique interdum,erat leo

我很难用swift可解码协议解码。我有一个RESTAPI,它返回以下JSON

{
数据:[
{
身份证号码:17,
状态:“已发布”,
创建人:{
身份证号码:1
},
创建于:“2020-01-13 17:38:31”,
标题:“Lorem ipsum dolor sit amet,Concertetur adi”,
内容:"毛里斯舌苔和舌苔是生命之门。毛里斯弓形面。粗糙的鼻梁和舌苔。Morbi porttitor,est sodales tristique interdum,erat leo consequat lorem,在猫科动物的舌苔中。粗糙的智人马萨。发酵的酒糟。但是,它的直径,中间有一个选择,三stiq

“, 特色图片:{ 数据:{ 完整url:“https://example.com/originals/14eefd0d-93fc-44f6-84a5-7cf86a2e83fc.jpg", url:“/uploads/abc/originals/14eefd0d-93fc-44f6-84a5-7cf86a2e83fc.jpg”, 缩略图:[……], 嵌入:空 } }, 来源:null, 你说的是真的吗 } ] }
以及我的模型的结构

struct PostRoot:可解码{
让数据:[张贴]
}
结构柱:可解码{
让id:Int
标题:字符串
让我们来看看:字符串
让内容:字符串
让源代码:String
让f_图像:特征图像
}
结构特征图像:可解码{
让数据:ImagePath
}
结构ImagePath:可解码{
让完整url:String
}
//只包括解码部分,不包括请求部分
如果设d=数据{
让decodedLists=try JSONDecoder().decode(PostRoot.self,from:d)
打印(解码列表)
}
从我的服务器得到响应后,解码过程总是以错误告终,我必须映射每个密钥吗?我在这里缺少什么

这就是错误:

错误:keyNotFound(编码键(stringValue:“f\u image”,intValue:nil),Swift.DecodingError.Context(编码路径:[编码键(stringValue:“data”,intValue:nil),\u JSONKey(stringValue:“Index 0”,intValue:0)],调试说明:“没有与键编码键相关的值(stringValue:“f\u image\”,intValue:nil)(“f\u image\”,UnderingError:nil))


也许这会有所帮助,它是通过“将JSON粘贴为代码”自动生成的,这表明您的代码中缺少一些键。此外,可能的错误可能是这不是JSON,键不是字符串,因此无法像那样解码

// MARK: - PostRoot
struct PostRoot: Codable {
    let data: [Post]
}

// MARK: - Post
struct Post: Codable {
    let id: Int
    let status: String
    let createdBy: CreatedBy
    let createdOn, title, content: String
    let featuredImage: FeaturedImage
    let source: String?
    let isFeatured: Bool

    enum CodingKeys: String, CodingKey {
        case id, status
        case createdBy = "created_by"
        case createdOn = "created_on"
        case title, content
        case featuredImage = "featured_image"
        case source
        case isFeatured = "is_featured"
    }
}

// MARK: - CreatedBy
struct CreatedBy: Codable {
    let id: Int
}

// MARK: - FeaturedImage
struct FeaturedImage: Codable {
    let data: DataClass
}

// MARK: - DataClass
struct DataClass: Codable {
    let fullURL: String
    let url: String
    let thumbnails: [String]
    let embed: String?

    enum CodingKeys: String, CodingKey {
        case fullURL = "full_url"
        case url, thumbnails, embed
    }
}

请共享错误。另外,这不是有效的JSON(您可以在此处检查实例:)。用do/catch环绕解码,并打印catch中的错误,以便将其包含在问题中。不过,有些指针,
source
是可选的,没有json键匹配
f_image
您的json具有
特色_image
,但您的模型具有
f_image
。它们需要相同。
源代码
>为空,在模型中应该是可选的,您需要将类型更改为
String?