SwiftUI调用API触发The data couldn’t be read格式错误排查求助
错误原因
你定义的JSON解析结构和接口实际返回的结构不匹配:
- 你的代码默认解析的根结构是
APIResult,要求JSON最外层是包含data字段的对象,data内部再嵌套count和results数组 - 但你提供的接口返回JSON根节点直接是国家数组,没有外层的包装字段,导致解析规则完全对应不上,触发格式错误
修复方案
修改searchCountry方法中的解码逻辑,直接解析[Countries].self即可:
// 原来的解码代码 // let countrys = try JSONDecoder().decode(APIResult.self, from: APIData) // 替换为 let countrys = try JSONDecoder().decode([Countries].self, from: APIData) DispatchQueue.main.async { if self.fetchCountries == nil { self.fetchCountries = countrys } }
额外排查建议
- 检查接口返回的
flag_url字段是否为合法URL格式:如果返回的字符串不符合URL规范(比如包含未转义的特殊字符、为空),URL类型的解码会直接失败。你可以先把Countries结构体中的flag_url类型改为String测试,确认字段值正常后再改回URL,或者改为可选型URL?避免单个字段异常导致整个数组解析失败。 - 调试解码错误时不要只打印
error.localizedDescription,直接打印error本身,可以输出具体的字段不匹配、类型错误等精准提示,方便快速定位问题。
内容的提问来源于stack exchange,提问作者EMPIRE
相关产品推荐
相关产品推荐

