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

如何处理JSON反序列化时返回不同数据类型的问题

Dart处理JSON响应的多类型兼容反序列化

后端返回的JSON存在两种格式:

  • 非空响应时是对象结构:
{
    "data": {},
    "errors": [],
    "memId": 0
}
  • 空响应时是空数组:[]

你的现有代码只处理了对象类型的输入,遇到空数组会直接报错,因为参数类型不匹配。可以通过先判断输入类型来兼容两种情况,修改后的代码如下:

factory MyJsonObject.fromJson(dynamic json) {
  // 处理空数组的情况,返回默认实例
  if (json is List && json.isEmpty) {
    return MyJsonObject(data: null, errors: [], memId: 0);
  }
  
  // 正常对象结构的处理逻辑
  final jsonMap = json as Map<String, dynamic>;
  return MyJsonObject(
    data: jsonMap["data"] != null ? Data.fromJson(jsonMap["data"]) : null,
    errors: jsonMap["errors"] != null ? List<dynamic>.from(jsonMap["errors"]!) : [],
    memId: jsonMap["memId"] ?? 0, // 给memId加默认值,避免null
  );
}

关键改动说明:

  • 将构造函数的参数类型从Map<String, dynamic>改为dynamic,允许接收数组或对象类型的输入
  • 先判断输入是否为空数组,若是则返回一个预设的默认MyJsonObject实例(可根据业务需求调整默认值)
  • 非数组类型时,强制转为Map后执行原有反序列化逻辑,同时给memId增加?? 0的默认值,避免后端未返回该字段时出现空值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 23:25:53