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

Flutter第三方JSON转SkinModel对象失败求助

排查Flutter JSON解析&请求失败的常见原因

1. 先确认网络请求本身是否成功

  • 把请求的URL直接贴到浏览器或Postman里测试,看能不能返回正常的JSON数据
  • 在请求代码里打印响应状态码和响应体:
    final response = await http.get(Uri.parse(yourUrl));
    print('状态码:${response.statusCode}');
    print('响应内容:${response.body}');
    
    如果状态码不是200,或者响应体是HTML错误页面(比如404、500提示),说明请求被第三方站点拦截或地址有误,和解析无关

2. 核对JSON结构与SkinModel的匹配度

  • 把第三方返回的JSON复制出来,和你手写的SkinModel逐一对比:
    • 字段名是否完全对应(注意JSON的下划线命名和Dart的驼峰命名是否通过@JsonKey映射正确)
    • 字段类型是否一致(比如JSON里是数字类型,你Model里写成了String;或者数组对应成了单个对象)
    • 有没有必填字段在JSON里返回null,但Model里没标记为可空(比如final String name;但JSON里name为null,会直接抛出解析异常)

3. 把异常详情打出来,不要只输出提示语

你的Sorry try again应该是在catch块里的统一提示,把具体异常和堆栈信息打印出来,直接定位问题:

try {
  // 你的Step3解析代码
} catch (e, stackTrace) {
  print('错误详情:$e');
  print('堆栈追踪:$stackTrace');
  print('Sorry try again');
}

比如如果是type 'Null' is not a subtype of type 'String',就知道是某个非空字段拿到了null;如果是FormatException,就是JSON格式本身有问题

4. 检查请求头是否符合第三方站点要求

很多站点会校验请求头(比如User-Agent、Referer),模拟浏览器的请求头试试:

final response = await http.get(
  Uri.parse(yourUrl),
  headers: {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36',
  },
);

5. 排查SSL证书问题(针对HTTPS站点)

如果第三方站点的SSL证书不被系统信任,Flutter请求会失败,调试时可以临时跳过证书验证(仅调试用,上线绝对不能这么做):

import 'dart:io';

HttpClient client = HttpClient()
  ..badCertificateCallback = ((X509Certificate cert, String host, int port) => true);
final request = await client.getUrl(Uri.parse(yourUrl));
final response = await request.close();
final responseBody = await response.transform(utf8.decoder).join();

内容的提问来源于stack exchange,提问作者Art Noimann

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 15:01:02