Преобразование вложенного JSON в плоский JSON

Я использую javascript, и у меня есть вложенный объект json, полученный из mongodb.

"abc": [
    {
      "a": "01AABCE2207R1Z5",
      "b": "Y",
      "c": [
        {
          "ca": "A",
          "cb": "AflJufPlFStqKBZ",
          "cc": "S008400"
         },
         {
          "cx": "A",
          "cy": "AflJufPlFStqKBZ",
          "cz": "S008400"
         }
        ]
     },

      {
      "a": "01AABCE2207R1Z5",
      "b": "Y",
      "c": [
        {
          "ca": "A",
          "cb": "AflJufPlFStqKBZ",
          "cc": "S008400"
         },
         {
          "cx": "A",
          "cy": "AflJufPlFStqKBZ",
          "cz": "S008400"
         }
        ]
     }
    ]

В приведенной выше схеме есть фиксированные поля, в схеме не будет никаких изменений.

Теперь я хочу сделать его плоским объектом массива json, и результат должен быть таким. Если c имеет несколько объектов json, он должен создать новый объект json с тем же значением a, b.

 [{
     "a": "01AABCE2207R1Z5",
     "b": "Y", 
     "ca": "A",
     "cb": "AflJufPlFStqKBZ",
     "cc": "S008400" 
    },
{
     "a": "01AABCE2207R1Z5",
     "b": "Y",  
     "cx": "A",
     "cy": "AflJufPlFStqKBZ",
     "cz": "S008400"
    },
    {
     "a": "01AABCE2207R1Z5",
     "b": "Y", 
     "ca": "A",
     "cb": "AflJufPlFStqKBZ",
     "cc": "S008400" 
    },
    {
     "a": "01AABCE2207R1Z5",
     "b": "Y",  
     "cx": "A",
     "cy": "AflJufPlFStqKBZ",
     "cz": "S008400"
    }
    ]

Итак, я хочу знать, как быстро и легко сделать его плоским. Пожалуйста, дайте мне знать процесс и методы решения этой проблемы.

Спасибо


person Saurabh Sharma    schedule 20.06.2017    source источник
comment
Это так просто сделать... Что вы пробовали?   -  person laurent    schedule 20.06.2017
comment
Вы даже не пометили это языком, на котором хотите это сделать... И у вас должен быть хотя бы подход, который вы придумали сами, чтобы показать нам.   -  person CBroe    schedule 20.06.2017
comment
Попробуйте npmjs.com/package/flat.   -  person Igor Popov    schedule 20.06.2017
comment
Я использую javascript @CBroe. и я попытался использовать forloop, но когда я делаю это с forloop, это становится длительным процессом.   -  person Saurabh Sharma    schedule 20.06.2017
comment
Один цикл над элементами основного уровня и внутри другого цикла, который получает все из подструктуры c, помещает его на тот же основной уровень, а затем удаляет исходный c ... насколько это сложно?   -  person CBroe    schedule 20.06.2017
comment
основной уровень abc может иметь несколько объектов в массиве, тогда c может иметь несколько объектов json   -  person Saurabh Sharma    schedule 20.06.2017


Ответы (1)


Это так легко сделать.

var flatArray = [];
var flatObject = {};

for (var index = 0; index < data.length; index++) {
  for (var prop in data[index]) {

    var value = data[index][prop];

    if (Array.isArray(value)) {
      for (var i = 0; i < value.length; i++) {
        for (var inProp in value[i]) {
          flatObject[inProp] = value[i][inProp];
        }
      }
    }else{
        flatObject[prop] = value;
    }
  }
  flatArray.push(flatObject);
}

console.log(flatArray);

данные - это ваш массив.

person Nuwan.Niroshana    schedule 20.06.2017
comment
Потрясающее использование js - person vijay; 22.06.2017