JavaScript для отображения соединения с вложенным Json и его реализации с помощью GOJS.

У меня есть JSON DATA, как показано ниже.

 [
  {
    "name": "car",
    "value": "",
    "children": [
      {
        "name": "v8_engine",
        "value": "",
        "children": [
          {
            "name": "cylinder-arrangement",
            "value": "",
            "children": [
              {
                "name": "type",
                "value": "string",
                "children": []
              },
              {
                "name": "max-elements",
                "value": "8",
                "children": []
              }
            ]
          }
        ]
      },
      {
        "name": "other-parts",
        "value": "",
        "children": [
          {
            "name": "per-cylinder-parts",
            "value": "",
            "children": [
              {
                "name": "piston-diameter",
                "value": "",
                "children": [
                  {
                    "name": "type",
                    "value": "uint32",
                    "children": []

                  },
                  {
                    "name": "range",
                    "value": "2000... 9000",
                    "children": []

                  }
                ]
              },
              {
                "name": "valves",
                "value": "",
                "children": [
                  {
                    "name": "number",
                    "value": "",
                    "children": []
                  },
                  {
                    "name": "position",
                    "value": "",
                    "children": []
                  }
                ]
              }
            ]
          }
        ]
      }
    ]
  }
] 

Я хочу проанализировать все элементы и их соответствующие дочерние элементы и перечислить их как родительские дочерние элементы и их внуки, как простое дерево в GOJS.

Я использую следующую логику, но она просто анализирует и отправляет данные узла и элемент массива данных ссылки в модели go-js.

переменная i=0;

            function loop(a) {
                if(a.yang_type!='' && a.name!=''){
                  nodeDataArray.push({ key:i,Data: a.yang_type + " " + a.name, group: -1 });
                    console.log("Data:",a.yang_type);
                    linkDataArray.push({ from: i, to: i+1 });
              }

                if(a.name!='' && a.value!=''){
                    nodeDataArray.push({ key:i,Data: a.name + " " + a.value, group: -1 });
                    linkDataArray.push({ from: 0, to: i+1 });

                }
                //console.log(a.name);
                i=i+1;
                // process you data
                Array.isArray(a.children) && a.children.forEach(loop); // check and iterate children
                myDiagram.model = go.GraphLinksModel(nodeDataArray, linkDataArray);

            }

Прилагается вывод, который я получаю, но дети загромождены. Я пропускаю какую-то логику в нажатии? введите здесь описание изображения


person Nadvez    schedule 21.06.2016    source источник
comment
В чем вопрос, собственно?   -  person Simon Sarris    schedule 21.06.2016
comment
он представляет JSON в виде дерева в GOJS. Мне нужна логика в Javascript, которая анализирует элемент, а затем подталкивает их к массиву nodeDataArray и linkData.   -  person Nadvez    schedule 21.06.2016


Ответы (1)


Я предлагаю вам использовать TreeModel GoJS, а не GraphLinksModel. http://gojs.net/latest/intro/usingModels.html

Взгляните на образец дерева DOM, http://gojs.net/latest/samples/DOMTree. HTML. Обратите особое внимание на функцию traverseDom. TreeModels ожидают наличия ссылки из дочерних данных на родительские данные. HTML DOM, как и ваши данные, проанализированные из JSON, имеет ссылки на дочерние элементы в массиве в родительских данных. Функция traverseDom этого примера проверяет, что каждый объект данных имеет ключ, который является числом или строкой, а затем присваивает дочернему свойству parent значение этого ключа.

Затем вы можете использовать массив этих объектов в качестве TreeModel.nodeDataArray.

person Walter Northwoods    schedule 21.06.2016