如何设置可解码的 JSON 结构,以便跳过 nil 值?

How do I set up a decodable JSON Struct so that nil values are just skipped?

提问人:helloworld12345 提问时间:5/16/2021 更新时间:5/16/2021 访问量:208

问:

我正在使用以下代码来保存 JSON 数据。但是,有时,数据显示为零。是否可以忽略这一点或在返回 nil 的情况下设置标准值?

struct Information: Decodable {
    
    public let value: Double?
    
    private enum CodingKeys: String, CodingKey {
        case value =  "value"
    }
}
iOS JSON Swift Xcode

评论

1赞 vadian 5/16/2021
您的代码确实忽略了 .如果大小写和原始值相等,则可以省略 CodingKeys。nil

答:

1赞 grigorevp 5/16/2021 #1

声明自定义解码逻辑可能会以一种糟糕的方式工作:

struct Information: Decodable {
    
    public let value: Double
    
    private enum CodingKeys: String, CodingKey {
        case value =  "value"
    }

    init(from decoder: Decoder) throws {
        let values = try decoder.container(keyedBy: CodingKeys.self)
        let preValue = try values.decode(Double?.self, forKey: .value)
        value = preValue ?? 0.0
    }

}

对于一个好的,请考虑 vadian 的笔记

评论

0赞 vadian 5/16/2021
。可能有效,但这是不好的做法。有。切勿解码可选类型。preValue = try values.decodeIfPresent(Double.self, forKey: .value) ?? 0.0
0赞 grigorevp 5/16/2021
@vadian 当然,成功了