Swift遍历AnyHashable字典:HTTP响应JSON数据访问报错如何解决
问题原因
你当前代码没有对JSON解析结果做明确的类型转换,dictionaryMessage["precios"]取出的是无类型的Any对象,直接执行下标访问、遍历操作会触发类型不匹配的错误。
从数据结构来看,precios对应的是字典数组,数组中每个元素是键值对格式的字典。
适配现有写法的修正代码
var dictionaryMessage: [String: Any]? do { if let data = result?.data(using: .utf8) { dictionaryMessage = try JSONSerialization.jsonObject(with: data, options: .mutableContainers) as? [String: Any] if let precios = dictionaryMessage?["precios"] as? [[String: Any]] { // 遍历precios数组内的所有字典元素 for precioItem in precios { // 遍历单个字典的所有键值 for (key, value) in precioItem { print("key: \(key) value: \(value)") } } } } } catch { print("解析错误: \(error.localizedDescription)") }
更推荐的Codable解析方案
Swift原生的Codable协议可以自动完成类型适配,无需手动做类型判断,代码更安全易维护:
// 定义和JSON结构匹配的模型 struct PriceItem: Codable { let id: Int let name: String let price: Double // 其余字段按照实际返回补充即可 } struct RootResponse: Codable { let precios: [PriceItem] } // 解析逻辑 do { guard let data = result?.data(using: .utf8) else { return } let response = try JSONDecoder().decode(RootResponse.self, from: data) // 直接使用结构化的解析结果 for item in response.precios { print("id: \(item.id) 名称: \(item.name) 价格: \(item.price)") } } catch { print("解析错误: \(error)") }
内容的提问来源于stack exchange,提问作者Ricardo Guerrero
相关产品推荐
相关产品推荐

