You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 14:18:01