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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 20:37:38