使用snake_大小写转换的JSON编码忽略编码键
我将以下结构发送到端点:使用snake_大小写转换的JSON编码忽略编码键,json,swift,encodable,Json,Swift,Encodable,我将以下结构发送到端点: struct IdleAlarmRequest: Encodable { let idleAlarm: [IdleAlarmParameters] enum CodingKeys: String, CodingKey { case idleAlarm = "IdleAlarm" } } 无论我做什么,idleAlarm都将在生成的JSON字符串中作为idle\u报警写入。这应该是IdleAlarm,因为“对象”是用这个API计
struct IdleAlarmRequest: Encodable {
let idleAlarm: [IdleAlarmParameters]
enum CodingKeys: String, CodingKey {
case idleAlarm = "IdleAlarm"
}
}
无论我做什么,idleAlarm
都将在生成的JSON字符串中作为idle\u报警写入。这应该是IdleAlarm
,因为“对象”是用这个API计算的,所以只有字段应该是蛇形的<代码>可解码工作正常
所有对象中的所有其他字段都是SNAKEKE,所以如果我不使用SnaKeKY案例,我需要为上百个字段添加代码键。
< P>在你的问题中没有代码,所以我不能完全理解你在做什么,考虑编辑它来添加更多的细节。< /P> 但我猜您是这样编码结构的:let request=IdleAlarmRequest(…)
let encoder=JSONEncoder()
encoder.keyEncodingStrategy=.convertToSnakeCase
做{
let data=try encoder.encode(请求)
}
抓住{
}
convertToSnakeCase
策略将您的编码密钥从camel-case转换为snake-case
如果不希望出现这种行为,可以删除该行
编辑:您可以创建自定义密钥编码策略
encoder.keyEncodingStrategy=.custom{key->CodingKey-in
//你自己的代码。。。
}
有数百个snake_cased字段,可能有10个密码,所以我想在特殊情况下使用codingkey。不幸的是,这是不可能的。如果您使用convertToSnakeCase
,它将转换您的所有编码密钥。您可以尝试创建一个自定义密钥编码策略,逻辑上忽略您的10个PascalCased密钥,我用一个示例编辑了我的答案。