Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用snake_大小写转换的JSON编码忽略编码键_Json_Swift_Encodable - Fatal编程技术网

使用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密钥,我用一个示例编辑了我的答案。