序列化时如何替换JavaScript对象中指定类型对象为自定义字符串
序列化JavaScript对象时按类型替换嵌套元素的问题
我有一组类似如下的JavaScript对象:
let query:any = [ {$match:{taskId: new ObjectId("62f0efaf451f8c1f678a29e9")}}, {$match:{$or:[{fieldName1:new Date()}, {fieldName2:new Date("2022-08-08T11:12:47.198Z")}]}} ]
注:字段名和查询结构不固定,可能包含对象与数组的多种嵌套组合。
我需要将其序列化,把Date对象和MongoDB ObjectId对象替换为自定义字符串。尝试使用JSON.stringify的replacer函数,以下是仅替换Date对象的代码:
var query = [ {$match:{$or:[{fieldName1:new Date()}, {fieldName2:new Date("2022-08-08T11:12:47.198Z")}]}} ] function customBodyEncoder(key, value) { console.log("value:", value) console.log("type: ", typeof(value)) console.log("-------------------") if (value instanceof Date) { return `#new_date_${String(value)}` } return value } let queryString = JSON.stringify(query, customBodyEncoder) console.log(queryString)
实际输出字符串:
[{"$match":{"taskId":"62f0efaf451f8c1f678a29e9"}},{"$match":{"$or":[{"fieldName1":"2022-08-16T18:23:00.014Z"},{"fieldName2":"2022-08-08T11:12:47.198Z"}]}}]
我需要按类型匹配并替换元素,但replacer似乎拿到的是已转为字符串的元素,无法得到预期输出:
[{"$match":{"taskId":"62f0efaf451f8c1f678a29e9"}},{"$match":{"$or":[{"fieldName1":"#new_date_2022-08-16T18:10:15.015Z"},{"fieldName2":"#new_date_2022-08-08T11:12:47.198Z"}]}}]
请问序列化时,是否有办法按类型替换JavaScript对象中任意位置的元素?
编辑:我的需求是序列化JS对象时保留(编码和解码)Date对象和MongoDB ObjectId,最终通过EJSON实现了该需求。
内容的提问来源于stack exchange,提问作者Isuru J
相关产品推荐
相关产品推荐

