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

为何JSON解码后需以属性而非字典下标方式访问数据?

为什么解码后用属性访问而非字典下标?

这本质是你解码得到的是自定义结构体实例,不是Swift原生字典,具体原因拆解:

  1. 你定义的Cars结构体是专门对应外层JSON结构的Codable类型,JSONDecoder会严格按照你定义的结构体字段,把JSON里的键值对映射成结构体的属性——JSON里的"cars"键,会直接对应到Cars结构体的cars属性,最终返回的result是Cars类型的实例,不是[String: Any]字典。

  2. Swift中,结构体/类的成员访问语法是.,而字典的键访问才用[]下标。你预期的result["cars"]是字典的用法,但这里result根本不是字典,自然不能这么用。

  3. 如果确实想得到字典类型的结果,你可以不用自定义Codable结构体,直接解码成[String: Any],比如:

let result = try JSONSerialization.jsonObject(with: data) as? [String: Any]
// 这时才能用result?["cars"]访问

但这种方式需要手动做类型转换,远不如自定义Codable类型安全、便捷。

附你给出的原始代码和JSON:

原始JSON数据

{"cars": [{"name": "Ferrari","price": "100"},{"name": "Lamborghini","price": "200"},{"name": "Ford Pinto","price": "1"}]}

自定义Codable结构体

struct Cars: Codable {
    let cars: [Car]
}
struct Car: Codable, Hashable, Identifiable {
    let id = UUID()
    let name: String
    let price: String
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 01:45:30