如何使用相同的类构造函数(而不是对象构造函数)将数组数据转换为JSON

a5g8bdjr  于 2023-04-08  发布在  其他
关注(0)|答案(1)|浏览(122)

我有带时间戳的消防站数据。
用户将数据备份为JSON文件-Export-Function

const dataStr = JSON.stringify(todos);
let dataUri = 'data:application/json;charset=utf-8,' + encodeURIComponent(dataStr);
let fileName = 'data.json';
let linkElement = document.createElement('a') as HTMLAnchorElement;
linkElement.setAttribute('href', dataUri);
linkElement.setAttribute('download', fileName);
linkElement.click();

然后用户将恢复数据-Import-Function

const uploadFile = fileInput.files[0];
const fileReader = new FileReader();
fileReader.onload = async (e) => {
const dataStr = e.target?.result as string;
const newDatas = JSON.parse(dataStr) as todosProps[];
console.log(newDatas);
settodos([
  ...todos,
  ...newDatas
]);
try {
  newDatas.map(async (d) => {
    await setDoc(doc(collectionRef, d.id.toString()), {
      ...d,
    });
  });
  console.log('finish import');      
} catch (error) {
  console.error(error);
}

我注意到,firestore timestamp对象值在转换为JSON时有不同的构造方法。
所以我不能在导入的文件中使用firestore函数,比如“.toDate().toMillis“。那么为什么它和原始的时间戳不一样呢?可能是我把原始数据转换成了JSON。或者我的代码是错误的?

我不知道该怎么做。我希望得到正确的命令。

rxztt3cl

rxztt3cl1#

Credits @Rahul Kumar
对于任何人来说,toDate()不是一个函数错误可能是因为你在JSON对象上使用它。你可以简单地使用从firebase接收到的timestamp对象,或者如果你不能直接使用它,那么要将它转换回timestamp对象,你可以这样做:

const timestamp = new firebase.firestore.Timestamp(jsonTimestamp.seconds, jsonTimestamp.nanoseconds)

现在执行timestamp.toDate()就可以了

相关问题