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

Swift如何定义适配嵌套JSON的Struct并解决JSONDecoder解码报错

问题排查与修复方案

一、Struct定义错误修复

你的Struct存在三处明显错误,会直接导致解码失败:

  • 缺少JSON中存在的texts、book两个属性的定义,Decodable协议默认要求所有JSON返回字段都有对应映射属性,除非你手动通过CodingKeys过滤不需要的字段
  • Lyrics结构体的字段映射CodingKeys枚举放错了作用域,你把它定义在了Chapter内部,系统无法识别Lyrics的字段对应规则
  • 没有把Lyrics结构体和Chapter的texts字段做关联

修正后的Struct代码如下:

struct Chapter: Decodable, Identifiable {
    var id: Int
    var chapter: Int
    var amount: Int
    var texts: [Lyrics]
    var book: Int

    struct Lyrics: Codable {
         var lyricText: String
         var lyricNumber: Int
         
         enum CodingKeys: String, CodingKey {
             case lyricText = "lyric"
             case lyricNumber = "number"
         }
     }
}

二、Invalid value around character 0报错的额外排查方向

这个报错的本质是JSONDecoder拿到的内容不是合法JSON结构,修复Struct后如果仍报错,按以下顺序排查:

  • 解码前先把拿到的Data转成字符串打印,确认返回内容是否符合预期:在解码前添加代码print(String(data: safeData, encoding: .utf8)),查看是否返回了404/500错误页、鉴权失败提示等非JSON内容
  • 检查API请求是否缺少必要头信息,比如Authorization鉴权头、Accept: application/json响应格式声明,部分接口未传对应头会返回HTML格式的错误内容
  • 确认后端返回的JSON是否携带UTF-8 BOM头,部分服务端返回的JSON会带BOM头导致首字符识别失败,这种情况需要先移除BOM头再进行解码

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 14:24:03