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

iOS Swift中如何从动态JSON匹配取值并转换为数组

实现思路

你需要分3步处理数据:

  • 遍历根字典所有子项,筛选出type字段为Object的对象
  • 将子对象中value对应的JSON字符串反序列化为字典
  • 校验反序列化后的字典是否存在contentType字段,符合要求的存入结果数组

完整代码示例

在你原来的case .success分支中替换为以下逻辑即可:

switch response.result {
case .success:
    guard let rootDict = response.value as? [String: Any] else {
        self.view.removeLoading()
        return
    }
    // 最终存储符合要求的结果数组
    var resultArr = [[String: Any]]()
    
    // 遍历所有子项
    for (_, subItem) in rootDict {
        // 第一步:校验type是否为Object
        guard let subDict = subItem as? [String: Any],
              let type = subDict["type"] as? String,
              type == "Object" else {
            continue
        }
        // 第二步:拿到value字段的JSON字符串并反序列化
        guard let valueJsonStr = subDict["value"] as? String,
              let valueData = valueJsonStr.data(using: .utf8),
              let valueDict = try? JSONSerialization.jsonObject(with: valueData) as? [String: Any] else {
            continue
        }
        // 第三步:校验是否存在contentType,符合则加入数组
        if valueDict["contentType"] != nil {
            resultArr.append(valueDict)
        }
    }
    
    // 这里可直接使用最终的结果数组
    print("符合要求的数组:\(resultArr)")
    
    self.view.removeLoading()
case .failure(let error):
    print("Error:", error)
    self.view.removeLoading()
}

注意点

  • 你原来代码中尝试把根字典转[String: String]必然会失败,因为根字典的所有值都是字典类型,不是字符串
  • 你的JSON结构里的value是序列化后的JSON字符串,必须先做反序列化才能读取其中的contentType字段
  • 如果需要把结果数组转成自定义模型,你可以替换resultArr的类型,自行做模型映射即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 06:45:01