如何在swift 4中手动解码json数据

弗拉基米尔·雷布里科夫

如何通过按键手动解码【相册】和【图片】?我试过了,但我不能。不知道是什么错误?谢谢 !我的 Json http://appscorporation.ga/api-user/test

struct ProfileElement: Codable {
    let user: User

    let postImage: String
    let postLikes: Int
    let postTags: String

    enum CodingKeys: String, CodingKey {
        case user

        case postImage = "post_image"
        case postLikes = "post_likes"
        case postTags = "post_tags"
    }
}

struct User: Codable {
    let name, surname: String
    let profilePic: String
    let albums: [Album]

    enum CodingKeys: String, CodingKey {
        case name, surname
        case profilePic = "profile_pic"
        case albums
    }
}

第二块

struct Album {
    let id: Int
    let title: String
    var images: [Image]
    enum AlbumKeys: String, CodingKey {
        case id = "id"
        case title = "title"
        case images = "images"
    }
}
struct Image: Codable {
    let id: Int
    let url: String

    enum CCodingKeys: String, CodingKey {
        case id = "id"
        case url = "url"
    }
} 
瓦迪安

你得到错误

“用户”类型不符合“可解码”协议

因为所有结构都必须采用(De)codable

如果您稍作更改,则结构会起作用

struct ProfileElement: Decodable {
    let user: User

    let postImage: String
    let postLikes: Int
    let postTags: String
}

struct User: Decodable {
    let name, surname: String
    let profilePic: String
    let albums: [Album]
}

struct Album : Decodable {
    let id: Int
    let title: String
    var images: [Image]

}
struct Image: Decodable {
    let id: Int
    let url: String
}

然后解码

let decoder = JSONDecoder()
decoder.keyDecodingStrategy = .convertFromSnakeCase // This line gets rid of all CodingKeys
let result = try decoder.decode([ProfileElement].self, from: data)

你可以得到每个图像

for item in result {
    for album in item.user.albums {
        for image in album.images {
            print(image)
        }
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章