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

