JSONEncoder从自定义对象创建的json无效

时间:2019-11-08 22:46:22

标签: json swift codable

我有一个这样的模型:

struct Cost : Codable {
    let id : String?
    let label : String?
    let value : String?

    enum CodingKeys: String, CodingKey {

        case id = "id"
        case label = "label"
        case value = "value"
    }

    init(from decoder: Decoder) throws {
        let values = try decoder.container(keyedBy: CodingKeys.self)
        id = try values.decodeIfPresent(String.self, forKey: .id)
        label = try values.decodeIfPresent(String.self, forKey: .label)
        value = try values.decodeIfPresent(String.self, forKey: .value)
    }

    func encode(to encoder: Encoder) throws {
        var container = encoder.container(keyedBy: CodingKeys.self)
        try container.encode(id, forKey: .id)
        try container.encode(label, forKey: .label)
        try container.encode(value, forKey: .value)
    }
}

我有一个这样的对象:

let newCost = Cost(id: "something", label: "something", value: "something")

我想在POST请求的正文中发送此对象,因此我使用JSONEncoder进行如下转换:

let jsonData = try! JSONEncoder().encode(newCost)

但是jsonData无效。有什么问题吗?

0 个答案:

没有答案