使用Alomifere 5.2获取响应后如何解析指定结构JSON数组获取全部值
解析Alamofire 5.2返回的JSON数组的实现方法
1. 优先推荐:用Codable自动解析(Alamofire 5.x原生支持)
首先根据你的JSON结构定义对应的Codable模型,字段名和数据类型完全匹配JSON返回值即可:
// 坐标嵌套模型 struct Coordinate: Codable { let x: Double let y: Double } // 数组元素模型 struct ResponseItem: Codable { let id: Int let type_id: Int let coordinate: Coordinate let name: String }
发起请求时直接调用responseDecodable方法自动解析:
import Alamofire AF.request("你的请求接口地址").responseDecodable(of: [ResponseItem].self) { response in switch response.result { case .success(let itemList): // 解析完成后直接遍历即可获取所有字段值 for item in itemList { print("id值:\(item.id)") print("type_id值:\(item.type_id)") print("name值:\(item.name)") print("x坐标值:\(item.coordinate.x)") print("y坐标值:\(item.coordinate.y)") } case .failure(let error): print("请求或解析失败:\(error.localizedDescription)") } }
2. 备选方案:手动解析JSON
如果有特殊场景需要手动处理返回值,可以先拿到原始JSON结构再逐字段取值:
AF.request("你的请求接口地址").responseJSON { response in switch response.result { case .success(let value): // 先把返回值转成字典数组格式 guard let jsonArray = value as? [[String: Any]] else { return } for itemDict in jsonArray { let id = itemDict["id"] as? Int ?? 0 let typeId = itemDict["type_id"] as? Int ?? 0 let name = itemDict["name"] as? String ?? "" let coordinateDict = itemDict["coordinate"] as? [String: Double] ?? [:] let x = coordinateDict["x"] ?? 0.0 let y = coordinateDict["y"] ?? 0.0 // 以上变量就是所有字段的取值,可直接使用 } case .failure(let error): print("请求失败:\(error.localizedDescription)") } }
注意事项
- 如果需要把Swift属性名改成驼峰命名(比如把
type_id改成typeId),可以在模型中自定义CodingKeys枚举做字段映射 - 要保证模型中字段的数据类型和JSON返回的类型完全匹配,否则会触发解析失败
内容的提问来源于stack exchange,提问作者uyarc
相关产品推荐
相关产品推荐

