У меня есть объект JSON, извлеченный из документа mongo вроде:
{
"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"
}
Моя проблемная предпосылка сосредоточена вокруг массива, содержащего объекты/массив объектов внутри него.
Я верю, что это может потребовать рекурсии на каком-то уровне. Что было бы хорошим путем для достижения вышеуказанного? Я пришел через этот пакет npm, который близок к тому, что мне нужно, но он не указывает на точечный массив напрямую.
На данный момент у меня нет рабочего/полурабочего кода, но я обновлю этот вопрос, если у меня что-то будет работать в правильном направлении.
Может ли кто-нибудь указать мне на какую-то логику получения этого орков? Я не против использования каких-либо доступных пакетов npm.
Возможно, вы можете использовать это в качестве отправной точки (это было во время обеда и не проверили его полностью)
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))