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

Flutter JSON解析中DateTime空值处理的技术求助

解决Flutter JSON解析中DateTime空值/缺失字段问题

直接给你几个可行的方案,解决CreatedDate字段缺失或为空时的解析异常:

方案1:解析时直接做空判断

先检查字段是否存在且有效,再执行DateTime解析,同时要确保你的TestModel中createdDate字段定义为可空类型DateTime?:

factory OfaModel.fromJson(Map<String, dynamic> json) => TestModel(
    createdDate: json.containsKey("CreatedDate") && json["CreatedDate"] != null 
        ? DateTime.parse(json["CreatedDate"]) 
        : null,
    recordtypeBm: json["recordtype_bm"],
    amsCustodialHistoryBm: json["AMSCustodialHistoryBM"] != null
        ? List<String>.from(json["AMSCustodialHistoryBM"].map((x) => x))
        : [], // 也可以设为null,根据业务需求调整
    subjectCode: json["SubjectCode"],
    recordtypeBi: json["recordtype_bi"],
  );

注:你原代码里subjectCode后面少了个逗号,已经帮你补上了

方案2:封装工具方法复用解析逻辑

如果多个模型都需要处理DateTime解析,写个工具方法更高效,还能兼容格式错误的情况:

// 封装DateTime解析工具
DateTime? parseDateTime(dynamic value) {
  if (value == null || value.toString().trim().isEmpty) return null;
  try {
    return DateTime.parse(value.toString());
  } catch (e) {
    // 这里可以加日志记录解析失败的异常,方便排查问题
    return null;
  }
}

// 模型解析时调用工具方法
factory OfaModel.fromJson(Map<String, dynamic> json) => TestModel(
    createdDate: parseDateTime(json["CreatedDate"]),
    recordtypeBm: json["recordtype_bm"],
    amsCustodialHistoryBm: json["AMSCustodialHistoryBM"] != null
        ? List<String>.from(json["AMSCustodialHistoryBM"].map((x) => x))
        : [],
    subjectCode: json["SubjectCode"],
    recordtypeBi: json["recordtype_bi"],
  );

额外注意点

  • 必须保证TestModel中对应的createdDate字段是可空类型,比如final DateTime? createdDate;,否则无法给它赋值null
  • 对于amsCustodialHistoryBm这类列表字段,同样要做空判断,避免字段缺失时调用map方法触发异常

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 16:25:09