SwiftUI解析JSON报错:预期解码Array却找到Dictionary该如何处理?
解决步骤
你的JSON返回根节点是包含Count和myflies两个字段的字典,[SightingsL]类型的数组仅存在于myflies字段下,之前的写法没有匹配JSON的层级结构,按以下两步修改即可:
- 新增顶层响应结构体,和JSON根结构匹配:
struct SightingsResponse: Codable { let Count: Int let myflies: [SightingsL] }
- 修改网络请求中的解码、赋值逻辑:
URLSession.shared.dataTask(with: request) {(data,response,error) in do { if let d = data { // 解码根层级的SightingsResponse结构体 let decodedResponse = try JSONDecoder().decode(SightingsResponse.self, from: d) DispatchQueue.main.async { [self] in // 取myflies字段的数组赋值给sightingsL self.sightingsL = decodedResponse.myflies } }else { print("No Data") } } catch { print (error) } }.resume()
注意事项
- 确认你已经定义的
SightingsL结构体已实现Codable协议,且内部属性名、类型和myflies数组下的字段完全匹配。如果字段命名规则不一致(比如Swift用小写开头驼峰命名userId,对应JSON的userID),需要在SightingsL中自定义CodingKeys做字段映射。
内容的提问来源于stack exchange,提问作者drago
相关产品推荐
相关产品推荐

