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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 10:48:03