2013-05-14 3 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)를 시도했다. 형식이 올바르지 않습니다. 그것은 나무의 모든 구조를 파괴합니다. 아이디어가 있으십니까?

위의 결과를 나타내는 코드입니다. JSON 문자열 표기법에 native JavaScript Object를 ("캐릭터 라인 화") 인코딩 할 수 있습니다

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

트리 개체를 복사하여 붙여 넣기합니까? 그렇다면 올바른 형식이 아니기 때문에 형식이 올바르지 않습니다. – jhorton

+0

개체의 기본 JavaScript 코드를 보거나 콘솔 로그에 인쇄하여 여기에 붙여 넣기를 원합니다. 위의 코드는 의사 코드이지만 prob 코드는 실제 코드 인 것 같습니다. –

답변

1

. 해당 표기법에서이 오브젝트의 다른 인스턴스를 역으로 생성 할 수 있습니다.

샘플 :

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

가 제공됩니다

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

코드

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

위는 자바 스크립트를하지 않습니다.

+0

위의 데이터는 jQuery로 생성되었습니다. – user2335149

관련 문제