我有一个从mongo doc中检索到的JSON对象,如:
{
"ipv4": {
"enable": "yes",
"rule": [
{
"flow": {
"destinationAddress": "0.0.0.0"
}
},
{
"flow": {
"destinationAddress": "2.2.2.2"
}
}
]
}
}
我想将其转换为:
{
"ipv4.enable": "yes",
"ipv4.rule.0.flow.destinationAddress": "0.0.0.0",
"ipv4.rule.1.flow.destinationAddress": "2.2.2.2"
}
我的问题前提是集中在一个包含对象/对象数组的数组中。
我相信这可能会在某种程度上要求递归。什么是实现上述目标的好方法?我来到了this npm package,接近于我需要的东西,但它并没有直接 dot-notate 一个数组。
目前,我没有任何工作/半工作代码可以展示,但如果我能够朝着正确的方向努力,我会更新这个问题。
有人能指出我获得这个orking的逻辑吗?我不介意使用任何可用的npm包。
答案 0 :(得分:0)
也许你可以把它作为一个起点(在午餐期间这样做并且避免了彻底的证明)
var data = {
"ipv4": {
"enable": "yes",
"rule": [
{
"flow": {
"destinationAddress": "0.0.0.0"
}
},
{
"flow": {
"destinationAddress": "2.2.2.2"
}
}
]
}
};
function dotnotate(data,prefix,dest){
prefix = prefix || "";
dest = dest || {};
var type = typeof(data);
switch(type){
case "object":
if(Array.isArray(data)){
data.forEach(function(item, i){
var tmpPrefix = prefix.length>0?prefix+"."+i:prefix+i;
dotnotate(item,tmpPrefix,dest);
});
}else{
Object.keys(data).forEach(function(key,i){
var tmpPrefix = prefix.length>0?prefix+"."+key:prefix+key;
dotnotate(data[key],tmpPrefix,dest);
});
}
break;
case "undefined":
return;
default:
dest[prefix]=data;
}
return dest;
}
console.log(dotnotate(data))