Преобразовать массив объектов JSON в нотную точку [дубликаты]

1

У меня есть объект 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.

1 ответ

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))
  • 0
    Спасибо Чираг. Я проверю это. Это похоже на принятый ответ на повторяющийся вопрос

Ещё вопросы

Сообщество Overcoder
Наверх
Меню