2013-05-14 5 views
0

У меня есть массив, который хранит данные в древовидной структуре, но я хотел бы преобразовать эти данные в json. Это пример моих данных:Как преобразовать дерево массивов в дерево Json?

[Object] 
    0: Object 
     children: Array[1] 
      0: Object 
      children: Array[1] 
       0: Object 
        children: Array[10] 
         0: Object 
         children: Array[6] 
         value: Object 
         1: Object 
         2: Object 
         3: Object 
         4: Object 
         5: Object 
         6: Object 
         7: Object 
         8: Object 
         9: Object 
         value: Object 
         Id: "00145E5BB2641EE284F811A7907757A3" 
         Parent: "00145E5BB2641EE284F811A7907737A3" 
         Ref: undefined 
         Text: "Functional Areas" 
         Type: "TWB" 

Теперь я хочу, чтобы преобразовать эти массивы данных Json. Я попробовал JSON.stringify (myArray); но формат неверен. Он разрушает всю структуру дерева. Любые идеи?

Это код, который дает результат выше.

function transformToStruct(xmlData, callback) { 
    var data = xmlData.item;   
    var roots=[]; 
    var children = {}; 
    var arry=createStructure(data); 

    // find the top level nodes and hash the children based on parent 
    for (var i = 0, len = arry.length; i < len; ++i) { 
     var item = arry[i], 
      p = item.Parent, 
      target = []; 

     if(p == rootId) { 
      target = roots; 
     } 
     else {    
      target = (children[p] || (children[p] = []));   
     } 

     target.push({ value: item }); 
    } 
    // function to recursively build the tree 
    var findChildren = function(parent) { 
     if (children[parent.value.Id]) { 
      parent.children = children[parent.value.Id]; 
      for (var i = 0, len = parent.children.length; i < len; ++i) { 
       findChildren(parent.children[i]); 
      } 
     } 
    }; 

    // enumerate through to handle the case where there are multiple roots 
    for (var i = 0, len = roots.length; i < len; ++i) { 
     findChildren(roots[i]); 
    } 
// var returnV = JSON.stringify(roots); 
// callback(returnV); 
    callback(roots) 
} 

function createStructure(data) { 
    var arry = []; 
    $.each(data, function(i, val) { 
     var parent = val["ParentId"]["#text"]; 
     var id = val["NodeId"]["#text"]; 
     var text = val["NodeText"]["#text"]; 
     var level = val["NodeLevel"]["#text"]; 
     var ref = val["RefObject"]["#text"]; 
     var type = (val["NodeType"]["#text"]).substring(0,3); 
     if(level == "01") 
      rootId = parent; 
     var item = {"Id": id, "Text": text, "Parent": parent, "Type" : type, "Ref" : ref}; 
     arry[i] = item; 
//  arry.push(item);   
    }); 
    console.log(arry) 
    return arry; 
} 
+0

возможно дубликат: http://stackoverflow.com/questions/10919965/how-do-i-encode-a-javascript-object-as-json –

+0

Является ли это копией и вставкой вашего объекта tree? Если это так, вы получаете неправильный формат, потому что это неверно. – jhorton

+0

Я хотел бы увидеть собственный код JavaScript вашего объекта или просто распечатать его в консольном журнале и вставить его здесь. выше - псевдокод, но проблема, по-видимому, является реальным кодом. –

ответ

1

JSON может кодировать ("stringify") в native JavaScript Object и струнный нотации. Он может в обратном порядке создать другой экземпляр этого объекта из этой нотации.

Пример:

var myArray = new Array("a", "b", "c"); 
var jsonNotation = JSON.stringify(myArray); 
console.log(jsonNotation); 

даст:

[ 
"a", 
"b", 
"c" 
] 

Код выше

[Object] 
    0: Object 
     children: Array[1] 

не JavaScript.

+0

Данные выше были сгенерированы с помощью jQuery. – user2335149

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