【问题标题】:How to manually decode json data in swift 4 [closed]如何在swift 4中手动解码json数据[关闭]
【发布时间】:2019-02-01 15:35:02
【问题描述】:

如何通过按键手动解码【专辑】和【图片】? 我试过了,但我做不到。 不知道是什么错误? 谢谢 ! 我的 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"
    }
} 

【问题讨论】:

  • 专辑不符合 Codable?和图像中“CCodingKeys”的拼写错误。还有“AlbumKeys”。

标签: json swift xcode parsing codable


【解决方案1】:

你得到错误

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

因为所有结构都必须采用(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)
        }
    }
}

【讨论】:

    猜你喜欢
    • 2017-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-19
    相关资源
    最近更新 更多