gpt4 book ai didi

swift - 使用 Decodable 将空 JSON 字符串值解码为 nil

转载 作者:搜寻专家 更新时间:2023-10-31 22:53:41 24 4
gpt4 key购买 nike

假设我有这样一个结构:

struct Result: Decodable {
let animal: Animal?
}

像这样的枚举:

enum Animal: String, Decodable {
case cat = "cat"
case dog = "dog"
}

但是返回的JSON是这样的:

{
"animal": ""
}

如果我尝试使用 JSONDecoder 将其解码为 Result 结构,我会得到 Cannot initialize Animal from invalid String value 作为一个错误信息。我如何正确地将此 JSON 结果解码为动物属性为 nil 的 Result

最佳答案

如果要将空字符串视为nil,则需要实现自己的解码逻辑。例如:

struct Result: Decodable {
let animal: Animal?

enum CodingKeys : CodingKey {
case animal
}

init(from decoder: Decoder) throws {
let container = try decoder.container(keyedBy: CodingKeys.self)
let string = try container.decode(String.self, forKey: .animal)

// here I made use of the fact that an invalid raw value will cause the init to return nil
animal = Animal.init(rawValue: string)
}
}

关于swift - 使用 Decodable 将空 JSON 字符串值解码为 nil,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53579032/

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