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

Flutter技术问题:如何将Timestamp对象编码为JSON?

解决Flutter Timestamp转JSON的异常问题

除了转换为DateTime,你还有以下几种方法解决jsonEncode无法处理Timestamp对象的问题:

方法1:利用Timestamp自身的toJson()方法(适用于Firebase Timestamp)

Firebase的Timestamp类自带toJson()方法,会将对象转为包含seconds和nanoseconds的可编码Map,直接调用即可:

var myData = {
  'bustime1': bustime1.toJson(), 
  'bustime2': bustime2.toJson(),
};
String encodedJson = jsonEncode(myData);

方法2:自定义编码器(局部处理)

在调用jsonEncode时,通过toEncodable参数指定Timestamp的转换规则,比如转为毫秒级时间戳:

String encodedJson = jsonEncode(myData, toEncodable: (object) {
  if (object is Timestamp) {
    return object.millisecondsSinceEpoch; // 转为毫秒时间戳,也可返回object.seconds用秒级时间戳
  }
  return object; // 其他类型按默认逻辑处理
});

方法3:直接转换为时间戳数值

直接提取Timestamp的秒或毫秒数值存入Map,这类基础数值可直接被JSON编码:

var myData = {
  'bustime1': bustime1.millisecondsSinceEpoch, 
  'bustime2': bustime2.seconds,
};
String encodedJson = jsonEncode(myData);

方法4:自定义扩展方法(统一处理)

如果需要在多处复用转换逻辑,可以给Timestamp添加扩展方法:

extension TimestampJson on Timestamp {
  dynamic toJsonValue() {
    return millisecondsSinceEpoch; // 可根据需求替换为toJson()或seconds
  }
}

// 使用时:
var myData = {
  'bustime1': bustime1.toJsonValue(), 
  'bustime2': bustime2.toJsonValue(),
};
String encodedJson = jsonEncode(myData);

以上方法都能跳过DateTime转换步骤,直接完成Timestamp的JSON编码,解决JsonUnsupportedObjectError异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 08:25:17