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

如何用Swift解码嵌套JSON字典?已有基础解码经验求指导

嵌套JSON结构解码实现

步骤1:定义对应嵌套结构的Decodable结构体

首先针对JSON里的members数组元素,定义内部结构体:

struct GroupMemberStruct: Decodable, Hashable {
    let memberId: String
    let memberName: String
    let memberUsername: String
    let memberType: Int
    let isMyFriend: Bool
    let initials: String
}

接着定义外层主结构体,包含members数组和其他顶层字段:

struct GroupStruct: Decodable, Hashable {
    let members: [GroupMemberStruct]
    let name: String
    let owner: String
    let description: String
    let groupType: Int
    let expiryDate: Date
    let readOnly: Bool
    let isDeleted: Bool
    let approvalRequired: Bool
    let joinWithCode: Bool
    let numberOfMembers: Int
    let groupAssociation: Int
    let id: String
    let etag: String
}

步骤2:配置JSONDecoder处理日期格式

JSON中的expiryDate是ISO 8601格式,必须给解码器设置对应策略,否则会解码失败:

let decoder = JSONDecoder()
decoder.dateDecodingStrategy = .iso8601

步骤3:修改解码函数逻辑

沿用你之前的请求框架,仅调整解码目标类型即可:

func getGroupDetails(token: String) async throws -> Int {
    // 替换为你的群组详情接口请求构建逻辑
    var request = EndPoints().getGroupDetailsEndPoint()
    request.httpMethod = "GET"
    request.addValue("application/json", forHTTPHeaderField: "Content-Type")
    request.setValue("Bearer \(token)", forHTTPHeaderField: "Authorization")
    
    let (data, response) = try await URLSession.shared.data(for: request)
    let httpResponse = response as? HTTPURLResponse
    
    guard (response as? HTTPURLResponse)?.statusCode == 200 else {
        return httpResponse?.statusCode ?? 0
    }
    
    let decoder = JSONDecoder()
    decoder.dateDecodingStrategy = .iso8601
    let decodedGroup = try decoder.decode(GroupStruct.self, from: data)
    
    // 替换为你的群组数据处理逻辑(如更新CoreData)
    self.updateCoreDataGroupRecords(groupData: decodedGroup)
    
    return httpResponse?.statusCode ?? 1000
}

关键说明

  • 嵌套JSON解码的核心是分层定义结构体:内层结构体对应JSON中的嵌套对象,外层结构体包含内层结构体的数组/对象字段。
  • 如果JSON字段名和Swift变量名不匹配(如下划线命名),可通过CodingKeys枚举做映射,当前字段名驼峰匹配无需额外处理。
  • 日期、数字等特殊类型必须匹配解码规则,否则会抛出解码错误;除了.iso8601,也可自定义日期格式化器适配非标准格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 20:00:16