2016-11-18 2 views
-1

Мне нужно преобразовать treeData JSON в другое, так что я могу использовать некоторую библиотеку визуализации в java-скрипте на нем.Преобразование JSON в дерево, как JSON

treeData={ 
     "leftNode": { 
      "leftNode": { 
       "leftNode": { 
        "leftNode": { 
         "leftNode": "fence_brand_name = 'reebok'", 
         "rightNode": "fence_brand_id = 123", 
         "centerOperator": "OR" 
        }, 
        "rightNode": "fence_category_name = 'shoes'", 
        "centerOperator": "AND" 
       }, 
       "rightNode": "latitude > 19.1140997", 
       "centerOperator": "AND" 
      }, 
      "rightNode": "latitude = 72.89498", 
      "centerOperator": "AND" 
     }, 
     "rightNode": "radius = 5000", 
     "centerOperator": "AND" 
    } 

Глубина этого дерева может быть что угодно, и форма, я хочу, чтобы преобразовать его в это

newTreeData=[{ 
      leftNode=[{ 
        leftNode=[{ 
          leftNode="left" 
          rightNode="right", 
          centerOperator="op" 
         }], 
        rightNode="right", 
        centerOperator="op" 
      }], 
      rightNode="right", 
      centerOperator="op" 
      }] 

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

var addNodes=function(data){ 
if(isObj(data.leftNode)){ 
var right=data.rightNode; 
var center=data.centerOperator; 
    newTreeData.push(rightNode:right,newCenterOperator:center,leftNode:[]); 
addNodes(data.leftNode); 
    }else{ 
newTreeData.push(rightNode:data.rightNode,centerOperator:data.centerOperator,leftNode:[]); 
    } 
} 

var function isObj(val) { 
if (val === null) { return false;} 
return ((typeof val === 'function') || (typeof val === 'object')); 
} 

ответ

0

Вам не нужно, потому что вы можете получить доступ к объекту JSON также в массиве обозначения, например:

treeData["leftNode"]["leftNode"] 

или записи объекта, как это:

treeData.leftNode.leftNode 

Конечно, вы также можете перебирать его, например. g .:

for (var leftNode in treeData.leftNode) { 
    // do something with leftNode 
} 
+0

Я не знаю глубины дерева. поэтому я не могу использовать объектную нотацию @ alpham8 – Subhash

+0

Но вы можете перебирать ее. Это был простой пример. Вы можете рекурсивно перебирать его. Сообщите себе о рекурсивном цикле функции: http://stackoverflow.com/questions/2549320/looping-through-an-object-tree-recursively – alpham8

+0

да, спасибо, спасибо. – Subhash

Смежные вопросы