gpt4 book ai didi

json - 网络响应中同一 json 对象的不同 key 类型

转载 作者:行者123 更新时间:2023-11-30 10:35:33 25 4
gpt4 key购买 nike

我的客户端有一个返回 Article 对象的服务。有一个 id 属性,它的类型为 UInt64。在同一个 api 中,当您请求类别文章时,您会得到包含文章的响应,但 id 是一个字符串。目前没有办法有人会改变这个愚蠢的事情,所以我必须找到一种解决方法来解析这两个答案。我的模型是这样的:

struct Article {
let id: UInt64
let categoryName: String?
}

extension Article: Decodable {
private enum Keys: String, CodingKey {
case id
case categoryName
}

init(from decoder: Decoder) throws {
let container = try decoder.container(keyedBy: Keys.self)

id = try container.decode(UInt64.self, forKey: Keys.id)
categoryName = try container.decodeIfPresent(String.self, forKey: Keys.categoryName)
}

如何检查Keys.id的类型并使用正确的方法进行解码?我必须同时使用

   id = try container.decode(UInt64.self, forKey: Keys.id)
id = try container.decode(String.self, forKey: Keys.id)

在这两种情况下都能正确解析我的对象。提前致谢

最佳答案

如果您想要解决方法,那么下面的答案可以做到这一点。我不知道这是否也是一个可能的好方法。期待改进这个答案。欢迎提出建议。

extension Article: Decodable {
private enum Keys: String, CodingKey {
case id
case categoryName
}

init(from decoder: Decoder) throws {
let container = try decoder.container(keyedBy: Keys.self)
// check if id is of type UInt64
do{
id = try container.decodeIfPresent(UInt64.self, forKey: Keys.id) ?? 0

}catch{
// if id is of String type convert it to UInt64
// do catch can be used here too
let str = try container.decodeIfPresent(String.self, forKey: Keys.id)
id = UInt64(str ?? "0") ?? 0

}
categoryName = try container.decode(String.self, forKey: Keys.categoryName)

}
}

关于json - 网络响应中同一 json 对象的不同 key 类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58128178/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com