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
相关产品推荐
相关产品推荐

