如何在Swift 4中手动解码JSON数据

时间:2019-02-01 15:35:02

标签: json swift xcode parsing codable

如何通过按键手动解码[相册]和[图像]? 我尝试过,但是我做不到。 不知道是什么错误? 谢谢 ! 我的杰森 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"
    }
} 

1 个答案:

答案 0 :(得分:0)

您收到错误

  

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

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