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
相关产品推荐
相关产品推荐

