2016-06-21 14 views
0

Ich habe einen JSON-Daten wie folgtJavaScript auflisten Verbindung mit verschachtelten Json und setzen es mit GOJS

[ 
    { 
    "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": [] 
        } 
       ] 
       } 
      ] 
      } 
     ] 
     } 
    ] 
    } 
] 

ich durch die einzelnen Elemente und ihre jeweiligen Kinder analysieren wollen und sie als Eltern Kinder auflisten und ihre Enkelkinder mögen einen einfachen Baum in GOJS.

Ich benutze die folgende Logik, aber das nur analysiert und schiebt Node-Daten und Link-Daten-Array-Element in go-js-Modell.

var i = 0;

Attached ist die Ausgabe, die ich bekomme, aber die Kinder sind überladen. Fehle ich etwas Logik beim Schieben? enter image description here

+0

Was ist die Frage, genau? –

+0

seine Darstellung der JSON als Baum in GOJS. Ich brauche eine Logik in Javascript, das durch das Element analysiert und dann schiebt sie an nodeDataArray und linkData Array – Nadvez

Antwort

0

Ich schlage vor, dass Sie einen GoJS TreeModel verwenden anstatt eine GraphLinksModel. http://gojs.net/latest/intro/usingModels.html

Werfen Sie einen Blick auf das DOM-Tree-Beispiel, http://gojs.net/latest/samples/DOMTree.html. Beachten Sie insbesondere die traverseDom Funktion. TreeModels erwartet einen Verweis von den untergeordneten Daten auf die übergeordneten Daten. HTML-DOM weist wie Ihre Daten, die aus JSON analysiert werden, die Verweise auf die untergeordneten Elemente in einem Array in den übergeordneten Daten auf. Die traverseDom-Funktion dieses Beispiels stellt sicher, dass jedes Datenobjekt über einen Schlüssel verfügt, bei dem es sich um eine Zahl oder eine Zeichenfolge handelt, und weist diesem Schlüsselwert die Eigenschaft parent des untergeordneten Elements zu. Sie können dann ein Array dieser Objekte als TreeModel.nodeDataArray verwenden.

+0

Die Implementierung ist für zwei oder mehr Datensätze mit Bäumen in ihnen. – Nadvez

+1

Ah, also nicht so ein einfacher Baum. Ich denke, Sie tun etwas wie das TreeMapper-Beispiel, http://gojs.net/latest/samples/treeMapper.html? OK, benutze doch ein ** GraphLinksModel **. Jedes Mal, wenn Sie die Eigenschaft 'parent' für die untergeordneten Daten festgelegt hätten, fügen Sie dem linkDataArray ein '{from: parentkey to: childkey}' hinzu. –

+0

Ja. Das habe ich verstanden, aber ich suche nach einer Java-Script-Funktion, die durch mein Json-Objekt analysiert und Node-Daten-Array und Link-Daten-Array schiebt – Nadvez

0
var nodeDataArray = [ 
           {isGroup:true,key:-1,text:"Service Parameters",xy:"210 31.999999999999996"}, 
           { isGroup: true, key: -2, text: "Device Model", xy: "435 36.000000000000014"} 
           ]; 
        var linkDataArray = []; 


        var i=0; 
        function loop(from) {   
         return function (a) { 
          var f = i; 

          if(a.yang_type!='' && a.name!=''){ 
            nodeDataArray.push({ key:i,Data: a.yang_type + " " + a.name, group: -1 }); 
            //c=c+a.name; 
            //console.log("c:",c); 
           //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 }); 
           //c=c+a.name+a.value; 
           console.log("c:",c); 
           //linkDataArray.push({ from: 0, to: i+1 }); 

          } 
          if (from !== undefined) { 
           linkDataArray.push({ from: from, to: i }); 
          } 
          i++; 
          if (Array.isArray(a.children)) { 
           a.children.forEach(loop(f)); 
          } 
          //console.log("c:",c); 
         }; 

        }