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
相关产品推荐
相关产品推荐

