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

iOS中不使用JSONDecoder解析带随机键的JSON对象的方法

解析方案

这种动态键的JSON结构不需要提前声明所有键,直接用[String: 子模型]类型接收动态对象字段,再提取值转为数组即可,具体实现如下:

  1. 先定义子模型和根响应模型
// 单个订单商品模型
struct OrderItem: Decodable {
    let productId: Int
    let productName: String
    let quantity: Int
    let price: String
    let variation: String
}

// 接口整体响应模型
struct OrderResponse: Decodable {
    let status: Bool
    // 直接用字典类型接收动态键的orderHistory对象
    let orderHistory: [String: OrderItem]
    
    // 可选扩展:直接封装计算属性返回排序后的订单数组,无需后续单独处理
    var sortedOrderList: [OrderItem] {
        // 按键的数字大小升序排列,不需要排序直接返回Array(orderHistory.values)即可
        orderHistory.sorted { Int($0.key) ?? 0 < Int($1.key) ?? 0 }.map(\.value)
    }
}
  1. 调用解析逻辑
do {
    let decoder = JSONDecoder()
    let result = try decoder.decode(OrderResponse.self, from: jsonData)
    // 直接使用sortedOrderList获取可用的订单数组即可
    print(result.sortedOrderList)
} catch {
    print("解析失败:\(error.localizedDescription)")
}

注意:你给出的示例JSON存在语法错误,每个price字段后缺少英文逗号,实际解析前需要确保后端返回的是合法JSON格式,否则会触发解析报错。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 11:30:04