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

Swift 4.1使用JSONDecoder解析本地JSON文件报错求助

问题诊断与解决办法

嘿,我一眼就看到两个导致你报错的核心问题,咱们一步步来解决:

1. JSON格式的非法尾逗号

你的JSON最后一个键值对后面多了个逗号,这是JSON标准明确禁止的语法错误:

{ "plant": "1015", "name": "SPEEDVALE", "key": "5035", }

把末尾的逗号删掉,修正后的合法JSON应该是:

{ "plant": "1015", "name": "SPEEDVALE", "key": "5035" }

JSONDecoder是严格遵循JSON规范的,这种多余的尾逗号会直接触发「无法读取数据,因为格式不正确」的错误。

2. 解码时的类型不匹配

你定义的AllData是单个对象的结构体,但你声明的变量是[AllData](数组类型),而你的JSON是单个对象{...},并非数组格式[{...}]。这种类型不兼容,哪怕JSON格式正确也会报错。

解决办法分两种场景:

  • 如果你只需要解析单个对象:把变量类型改成AllData?,解码代码调整为:
    if let url = Bundle.main.url(forResource: "data", withExtension: "json"),
       let data = try? Data(contentsOf: url) {
        do {
            let allData = try JSONDecoder().decode(AllData.self, from: data)
            print(allData)
        } catch {
            print("解码错误详情:\(error)")
        }
    }
    
  • 如果你需要解析数组结构:把JSON改成数组格式,比如:
    [
      { "plant": "1015", "name": "SPEEDVALE", "key": "5035" }
    ]
    
    保持变量[AllData]类型,解码时用[AllData].self即可。

另外建议你在catch块里打印完整错误信息,这样能更快定位问题,比系统默认的泛泛提示有用得多。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 06:49:27