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

