json в дерево с указанием id и parent

269
13 ноября 2017, 22:40

Есть json данные, чтобы отобразить их в jquery плагине генераторе дерева, нужно перевести в формат с указанием id и parent id, причем почти во всех плагинах визуализации json такой формат воспринимается по стандарту.

Есть такой объект данных

{
   "product": {
      "recommended": {
         "article": "blabla",
         "description": []
      },
      "article": [],
      "description": [],
      "manufacturer": [],
      "images": {
         "custom": [],
         "commercial": []
      },
      "reviews": []
   }
}

На выходе нужно получить

[{
    id: 0,
    parent: 0,
    key: "product"
}, {
    id: 1,
    parent: 0,
    key: "recommended"
}, {
    id: 2,
    parent: 1,
    key: "article",
    value: "blabla"
}, ...]

Подходящих библиотек для работы с деревом или функций в сети не нашлось.

Answer 1

var obj = { 
  objects: { 
    lol: "kek", 
    jack: "chebureck" 
  }, 
  hz: { 
    obj1: "1", 
    objM: { 
      obj2: "2", 
      obj3: "3" 
    } 
  } 
}; 
//^^это тестовый объект 
var i = 1,//id первого класса 
  tree = function(obj, parent) { 
    var req = []; 
    for (var key in obj) {//переор по прямым потомкам объекта 
      var tmp = { 
          id: i, 
          parent: parent !== undefined ? parent : 0,//задаёт id родителя(если его нет, то 0, т.к. сам obj тоже счтается, но вы можете и -1 поставить) 
          key: key 
        }, 
        c = obj[key].constructor === Object;//так более быстро и надёжно проверять, чем typeof 
      i++; 
      if (!c) 
        tmp.value = obj[key];//если в значении- не объект, то мы просто добавляем в вывод value 
      req.push(tmp); 
      if (c)//если объект, то начинается рекурсия, первый аргумент- объект из value, второе- id его родителя(текущего объекта) 
        tree(obj[key], tmp.id).forEach(function(el) { 
          req.push(el); 
        }); 
    } 
    return req; 
  } 
console.log(tree(obj));

READ ALSO
Открывается сразу 2 меню

Открывается сразу 2 меню

Доброго времени суток, при нажатии на гамбургер открывается главное меню, и подменю, хотя подменю должно открываться при наведении на какой...

248
Что то не так с гамбургером

Что то не так с гамбургером

Дело такое, при нажатии на гамбургер , он анимирует и открывается меню, тут все нормНо после того как нажал на пустое место(не на меню) , меню...

214
Как выбрать всех детей после n

Как выбрать всех детей после n

Есть страница на которой есть несколько пунктов Li, в этих Li пользователи могут оставить (из админки) много текста, текст разбит на абзацыЗадача...

242
Как в sublimeText - sublimeREPL,передавать в интерпретатор php файлы php

Как в sublimeText - sublimeREPL,передавать в интерпретатор php файлы php

Проблема с плагином для sublime text - sublimeREPL

255