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

Swift 4.1中解析嵌套JSON遇未知错误求助

嵌套JSON解析失败?试试这些排查步骤!

看起来你在解析嵌套JSON的时候卡壳了,普通JSON没问题但嵌套的就报错,结合你给出的代码,我给你梳理几个常见的问题和解决办法:

1. 先补全结构体的完整定义

你给出的EventProducer结构体代码截断了(let n...),这会直接导致编译错误,更别说正常解码了。首先得把这个结构体补全,确保所有属性都有完整的类型定义——比如如果JSON里EventProducer包含name字段,就写成let name: String?;所有非必填的属性尽量设为可选类型(带?),避免因为JSON里缺失字段导致解码失败。

2. 确认键名与JSON完全匹配

如果JSON里的字段名和你的结构体属性名不一致(比如JSON里是event_producer,但你结构体里写的是producer),解码就会失败。这种情况需要自定义CodingKeys枚举做映射,比如在ProducerData里添加:

enum CodingKeys: String, CodingKey {
    case id, name, login, producer = "event_producer" // 把JSON键名映射到结构体属性
    case roles, config
}

3. 检查嵌套类型、数组类型是否匹配

比如你定义的config是[String]?,但如果JSON里的config是一个字典({...})或者其他非数组类型,就会触发解码错误。一定要确保结构体属性类型和JSON对应字段的类型完全一致:数组对应数组、对象对应结构体、字符串对应字符串。

4. 加上错误捕获,看具体报错细节

很多时候你不知道问题出在哪,是因为没打印具体的解码错误。建议用do-catch块包裹解码代码,把错误信息打出来——它会明确告诉你是哪个键不匹配、哪个类型不对:

// 假设你已经把JSON字符串转成了Data
let jsonData = yourJSONString.data(using: .utf8)!

do {
    let producer = try JSONDecoder().decode(Producer.self, from: jsonData)
    print("解码成功啦!\(producer)")
} catch {
    print("解码错误详情:\(error)")
}

比如如果是类型不匹配,错误信息会显示Expected to decode Array<String> but found a dictionary instead,这样你就能精准定位问题。

完整示例参考

假设你的目标JSON结构是这样的:

{
  "data": {
    "id": 1,
    "name": "Joel's Producer",
    "login": "joel_junior",
    "producer": {
      "id": 101,
      "name": "Event Studio"
    },
    "roles": ["manager", "creator"],
    "config": ["theme_dark", "notifications_on"]
  },
  "messages": ["Load successful"],
  "success": 1
}

对应的完整结构体应该是:

import Foundation

struct Producer: Decodable {
    var data: ProducerData?
    var messages: [String]?
    var success: Int?
}

struct ProducerData : Decodable {
    let id: Int?
    let name: String?
    let login: String?
    let producer: EventProducer?
    let roles: [String]?
    let config: [String]?
}

struct EventProducer : Decodable {
    let id: Int?
    let name: String? // 补全你之前截断的属性
}

按照上面的步骤逐一排查,应该能快速找到问题所在!

内容的提问来源于stack exchange,提问作者Joel Júnior

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:41:50