You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Swift中如何解码Pascal Case格式的API密钥?

解决Swift Codable首字母大写属性的解码问题

当结构体属性采用首字母大写格式(如TheNumber)时,默认的JSONDecoder无法自动匹配JSON中的键(即使手动调整键的大小写也无效),核心原因是Codable默认采用严格的大小写匹配策略,只有属性名和JSON键名完全一致时才能成功解码。

解决方案1:手动指定CodingKeys映射

最直接的方式是通过CodingKeys枚举显式关联属性名与JSON键名:

struct TheData: Codable {
    let TheNumber: Float
    
    // 明确指定JSON键与属性的映射关系
    enum CodingKeys: String, CodingKey {
        case TheNumber = "theNumber" // 字符串值对应JSON中的实际键名
    }
}

如果你的JSON键本身就是首字母大写的"TheNumber",只需将枚举值的rawValue改为"TheNumber"即可。

解决方案2:自定义KeyDecodingStrategy批量处理

如果存在大量首字母大写的属性,手动编写CodingKeys效率低下,可以自定义解码策略自动完成大小写转换:

let decoder = JSONDecoder()
decoder.keyDecodingStrategy = .custom { codingKeys in
    let originalKey = codingKeys.last!.stringValue
    guard let firstCharacter = originalKey.first else {
        return codingKeys.last!
    }
    // 将JSON键的首字母转为大写,匹配结构体的首字母大写属性
    let modifiedKey = String(firstCharacter).uppercased() + originalKey.dropFirst()
    return AnyCodingKey(stringValue: modifiedKey)!
}

// 辅助类:实现CodingKey协议,支持自定义键转换
private struct AnyCodingKey: CodingKey {
    var stringValue: String
    var intValue: Int?
    
    init?(stringValue: String) {
        self.stringValue = stringValue
        self.intValue = nil
    }
    
    init?(intValue: Int) {
        self.stringValue = String(intValue)
        self.intValue = intValue
    }
}

如果你的JSON键是首字母大写、属性是小驼峰格式,只需把代码中的uppercased()替换为lowercased()即可。

注意事项

  • Swift允许常量首字母大写,但Codable不会自动处理大小写差异,必须显式指定映射规则或转换策略。
  • 确保JSON键名与你设置的映射/转换规则完全匹配,比如JSON键是"TheNumber"就对应属性TheNumber,或通过策略自动转换为对应格式。

内容的提问来源于stack exchange,提问作者Viaxeen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 00:01:17