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

Flutter使用Http发起Get请求报错无法取数,Postman正常如何排查?

问题根因

从报错信息可以看出,你的接口返回了拼接在一起的两段合法JSON结构,不是标准的单个JSON对象/数组,所以Dart的jsonDecode方法无法直接解析。Postman能正常显示,是因为Postman会自动做响应格式化处理,自动过滤或者拆分了异常拼接的内容,才看起来是正常的。

解决方案

你可以按以下步骤逐一排查修复:

  • 第一步:先打印完整响应体确认内容
    先把json解析的代码注释掉,直接打印response.body的完整内容,确认是否真的是两段JSON拼接的结构,同时也确认下实际的响应头Content-Type是否为application/json。
    示例修改代码:
    Future fetchAlbum() async {
      final token = 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOjI4OTksImlzcyI6Imh0dHBzOi8vcG9ydGFsLWFwaS5qb21ha2hhdGEuY29tL2FwaS9hdXRoL2xvZ2luIiwiaWF0IjoxNjMxMjUxNjYwLCJleHAiOjE2MzEzMzgwNjAsIm5iZiI6MTYzMTI1MTY2MCwianRpIjoiNlFEUTZCYnBMT0JhdUJoaSJ9.jAY_2nYxjgsIvXZY5vn0vAr_pwF6UBYbSGZ8wqD0YPQ';
      final response = await http.get(
        Uri.parse('https://portal-api.jomakhata.com/api/getLeaveDetails?token=${token}'),
      );
      // 先注释json解析,打印完整响应内容和状态码
      print("响应状态码:${response.statusCode}");
      print("完整响应体:${response.body}");
      print("响应头Content-Type:${response.headers['content-type']}");
    
      if(response.statusCode==200){
        print("ok");
      }
      else{
        print("error!");
      }
      return;
    }
    
  • 第二步:临时修复解析逻辑
    如果确认是接口返回多段JSON拼接,你可以先通过字符串拆分的方式提取你需要的第一段合法JSON再解析,示例代码:
    String rawBody = response.body;
    // 找到两个JSON拼接的位置
    int firstJsonEndIndex = rawBody.indexOf('}{');
    // 提取第一段有效JSON
    String validJson = firstJsonEndIndex != -1 ? rawBody.substring(0, firstJsonEndIndex + 1) : rawBody;
    final responseJson = jsonDecode(validJson);
    
  • 第三步:彻底修复方案
    这个问题本质是后端接口的返回异常,返回的内容里同时带了业务数据和SQL报错信息,你可以把完整的响应体发给后端开发,让后端排查接口逻辑,修正返回格式,只返回一段合法的JSON结构即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 05:45:00