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

Flutter中访问JSON对象失败:无法获取code字段的修复方案

问题修复:无法识别响应中的code字段

你的代码之所以进入else分支抛出InvalidResponse,核心原因是JSON响应里的code字段嵌套在synchData对象下,但当前代码直接在根级别的body中查找code,自然匹配不到。

修复方案

调整响应解析逻辑,先获取嵌套的synchData对象,再从中提取code和message字段:

修改parseResponse方法中case 200的代码块:

case 200:
  {
    final Map<String, dynamic> body = json.decode(response.body);
    print("body= $body");
    
    // 先取出嵌套的synchData对象,增加空安全判断
    final Map<String, dynamic>? synchData = body['synchData'] as Map<String, dynamic>?;
    
    if (synchData != null && synchData.containsKey("code")) {
      // 将synchData传入BaseResponse.fromJson,适配嵌套结构
      BaseResponse baseResponse = BaseResponse.fromJson(synchData);
      print("baseResponse= $baseResponse");
      
      if (baseResponse.code != 0) {
        if (baseResponse.refreshTokenExpired) {
          return Left(SessionExpiry(message: baseResponse.message));
        } else if (baseResponse.userResigned) {
          return Left(UserResigned(message: baseResponse.message));
        }
        return Left(ServerValidation(message: baseResponse.message));
      } else {
        var result = await compute(callback, response.body);
        return Right(result as Q);
      }
    } else {
      return Left(InvalidResponse());
    }
  }
  break;

补充说明

如果你的BaseResponse类原本是按照根级包含code、message的结构定义的,上面的修改直接把synchData传给fromJson就能正常解析。如果不想改动BaseResponse的结构,也可以手动从synchData中提取字段后构造实例:

// 替代BaseResponse.fromJson(synchData)的写法
BaseResponse baseResponse = BaseResponse(
  code: synchData['code'],
  message: synchData['message'],
  refreshTokenExpired: synchData['refreshTokenExpired'] ?? false,
  userResigned: synchData['userResigned'] ?? false,
);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 13:42:45