Javascript 带有符号键get';由Stringify删除的,也可以';别再说了

Javascript 带有符号键get';由Stringify删除的,也可以';别再说了,javascript,json,Javascript,Json,我正在使用Sequelize orm模块。这是一个很好的orm模块。但是在where选项上,有些东西是有线的 const option = { where: { name: { [Op.like]: `%${name}%` } } } const result = await model.findOne(option) 正如上面代码所示,name属性将objectOp.like作为键。我检查了Sequelize的Op的代码库,发现它是符号。Op.like只是Symbol.for('like')

我正在使用Sequelize orm模块。这是一个很好的orm模块。但是在where选项上,有些东西是有线的

const option = { where: { name: { [Op.like]: `%${name}%` } } }
const result = await model.findOne(option)
正如上面代码所示,
name
属性将object
Op.like
作为键。我检查了Sequelize的
Op
的代码库,发现它是
符号。
Op.like
只是
Symbol.for('like')

当然,使用orm本身没有问题,但我的问题是将
选项
字符串化为json。
Json.stringify
的结果如下(符号键值被删除):

我必须保存
where
查询的所有历史记录并在以后重新使用,但没有任何解决方案。 研究了许多字符串化库,如or,但仍然存在相同的问题。 我也读过这篇文章,但它是带有符号的
值的情况,而不是
键的情况。
并尝试使用自定义替换程序,但也无法迭代

JSON.stringify(option, (key, value) => {
  if(typeof key === 'symbol') {
    console.log('symbol key: ', key) // nothing detected here
  }
  return value
})

请帮助我提出任何建议。

如注释中所述,符号键被明确排除在
JSON.stringify
之外(或者更确切地说,在
转换字符串时作为符号抛出错误)。因此,它们出现在
JSON.stringify
中的唯一方法是用字符串键替换它们

函数去符号化(o){
if(数组isArray(o)){
返回o.map(去符号化);
}else if(类型o!=“对象”){
返回o;
}否则{
设d=Object.assign(Object.create(Object.getPrototypeOf(o)),o);
Object.getOwnPropertySymbols(o).forEach(k=>{
d[``]=o[k];
删除d[k];
});
Object.keys(d).forEach(k=>d[k]=去符号化(d[k]);
返回d;
}
}
常量Op={like:Symbol.for('like')};
const option={where:[{name:{[Op.like]:`Amadan`}}]}
const desymOption=取消符号化(选项);

console.log(JSON.stringify(desymOption));//{“where”:[{“name”:{“:“Amadan”}]}
将使用
[Op.like.description]
帮助?来自MDN的
JSON.stringify
docs:“所有符号键控属性将被完全忽略,即使在使用replacer函数时也是如此。”按设计工作。你想要的输出是什么?太棒了!你节省了我的时间因此,迭代符号的解决方案是
getOwnPropertySymbols
函数。
JSON.stringify(option, (key, value) => {
  if(typeof key === 'symbol') {
    console.log('symbol key: ', key) // nothing detected here
  }
  return value
})