1

我有以下发送到端点的结构:

struct IdleAlarmRequest: Encodable {
    let idleAlarm: [IdleAlarmParameters]

    enum CodingKeys: String, CodingKey {
        case idleAlarm = "IdleAlarm"
    }
}

无论我做什么,idleAlarm都会在生成的 JSON 字符串中写为 idle_alarm。这应该是IdleAlarm因为“对象”使用这个 API 是 PascalCased,只有字段应该是 snake_cased。Decodable工作正常。

所有对象中的所有其他字段都是snake_case,所以如果我不使用snake_case,我需要为数百个字段添加CodingKeys。

4

1 回答 1

1

您的问题中没有代码,因此我无法完全理解您在做什么,请考虑对其进行编辑以添加更多详细信息。

但我猜你是这样编码你的结构的:

let request = IdleAlarmRequest(...)

let encoder = JSONEncoder()
encoder.keyEncodingStrategy = .convertToSnakeCase
do {
    let data = try encoder.encode(request)
}
catch {

}

convertToSnakeCase策略将您的编码密钥从驼峰式转换为蛇形。

如果您不希望这种行为,您可以删除该行。

编辑:您可以创建自定义键编码策略。

encoder.keyEncodingStrategy = .custom { key -> CodingKey in
    // Your own code...
}
于 2019-04-25T03:39:21.740 回答