Swift中如何从JSON获取@microsoft.graph.downloadUrl字段?含@符号的属性无法声明的解决办法
解决Swift解析OneDrive JSON中@开头字段的问题
嘿,这个问题我对接OneDrive API的时候也踩过坑!Swift的标识符规则确实不允许属性名以@开头,但我们可以通过自定义CodingKeys枚举来做JSON字段和结构体属性的映射,轻松绕开这个限制。
修正后的完整代码
import Foundation import UIKit struct OnedriveItemsData: Decodable { let value : [Value] } struct Value: Decodable { let name: String let downloadUrl: String // 改成Swift合法的属性名 // 自定义CodingKeys,映射JSON原始字段到结构体属性 enum CodingKeys: String, CodingKey { case name case downloadUrl = "@microsoft.graph.downloadUrl" // 这里对应JSON里带@的原字段名 } }
为什么这样可行?
- Swift的
Decodable协议原生支持通过CodingKeys枚举显式指定映射关系 - 枚举的
rawValue可以直接写JSON里的原始字段名(哪怕包含@、特殊符号),而枚举case则用Swift允许的合法命名 - 解析时
JSONDecoder会自动根据CodingKeys的配置匹配字段,完全不影响正常解析流程
额外提示
如果之后遇到其他带特殊字符的JSON字段(比如空格、非常规符号),都可以用同样的方法处理,只需要在CodingKeys里添加对应的case和rawValue即可。
内容的提问来源于stack exchange,提问作者Tushar Arya
相关产品推荐
相关产品推荐

