【发布时间】:2021-06-25 09:45:06
【问题描述】:
我有一个 JSON 对象,它的键名中有点。我需要用“DOT”替换这些点(例如)。
{
"key1.key": "merciful",
"key2": {
"key2.key": "grateful"
}
}
所以,key1.key 转换为 key1DOTkey
使用Change key name in nested JSON structure 中建议的方法,我使用了 JSON.Parse 的reviver parameter,它可以像一个魅力一样替换键名中的任何内容,除了点:替换点时,它会截断对象。
此代码替换所有“e”并且工作正常
var parseE = JSON.parse(obj, function (k, v) {
if (k.search(".") != -1)
this[k.replace(/e/g, 'DOT')] = v;
else
return v;
});
返回
{
"kDOTy1.kDOTy": "merciful",
"kDOTy2": {
"kDOTy2.kDOTy": "grateful"
}
}
但是如果我尝试替换点“.”,那么对象会被截断
var parseDOT = JSON.parse(obj, function (k, v) {
if (k.search(".") != -1)
this[k.replace(/\./g, 'DOT')] = v;
else
return v;
});
返回第一个键值对,很好地替换,但没有别的:
{
"key1DOTkey": "merciful"
}
我尝试过使用replaceAll,甚至创建了一个函数来一一替换字符以避免使用正则表达式,以防万一。没什么,同样的结果。
这是一个小提琴:https://jsfiddle.net/dpiret/dgk5fp16/7/
注意:替换字符串对象中的所有点对我不起作用,因为它也会替换值中的点。
如果有任何指示,我将不胜感激
【问题讨论】:
标签: javascript object parsing