Swift 如何创建正确本地JSON文件及对应模型解决解析数据损坏报错
JSON解析报错修复方案
错误原因
你的解析失败完全是因为Codable模型定义和JSON结构不匹配,具体问题如下:
BeatPackData结构体的属性名和JSON键不对应:JSON中子对象的两个键为loopsdictionary、beatloopsdictionary,你定义的loopdata、beatloopsdata属于拼写错误。beatpackdata数组的两个元素分别只携带loopsdictionary、beatloopsdictionary其中一个键,你没有将这两个属性声明为可选类型,解析到缺少对应键的对象时会直接判定为数据损坏。LoopData结构体的属性名和JSON键不匹配:JSON中对应键为小驼峰格式的loopName、instrument、songName,你定义的下划线格式loop_name、song_name以及首字母大写的Instrument均不符合匹配规则。
修复后的代码
修正后的Codable模型
import Foundation struct BeatData: Codable { let beatpackdata: [BeatPackData] } struct BeatPackData: Codable { // 修正属性名,设置为可选 let loopsdictionary: [BeatLoopsData]? let beatloopsdictionary: [LoopData]? } struct LoopData: Codable { // 修正属性名匹配JSON键 let loopName: String let instrument: String let songName: String let producer: String } // 该结构体属性和JSON匹配,无需修改 struct BeatLoopsData: Codable { let nameOfLoop: String let nameOfProducer: String let countOfLoops: String let genreOfLoops: String }
解析后取数逻辑
你的解析函数无需修改,解析完成后分别在两个视图控制器取对应数据即可:
- 取
loopsdictionary数据:beatPackData.beatpackdata[0].loopsdictionary - 取
beatloopsdictionary数据:beatPackData.beatpackdata[1].beatloopsdictionary
内容的提问来源于stack exchange,提问作者mozeX
相关产品推荐
相关产品推荐

