2014-07-16 3 views
0

두 개의 열이있는 Excel 파일을 Json 파일로 변환하려고합니다. 그러나, 나는 또한 어떻게 계층 구조를 유지하고 싶습니다. 예를 들어 아래의 Excel 파일에서 json이 "Charles Johnson"이 루트 값이고 그와 관련된 크기가 5395 인 방식으로 계층 구조를 만들길 원합니다. 마찬가지로 두 번째 행의 "Donald Williams" "Charles Johnson"에서 작동하며 그 크기는 3057입니다. 파일의 각 행에있는 성은 부모 노드에 연결합니다. 어떤 도움/주시면 감사하겠습니다 :)파일을 json 변환으로 변환

Charles Johnson 4184 
Charles Johnson-Donald Williams 8385 
Charles Johnson-Donald Williams-Daniel Fertig 428 
Charles Johnson-Donald Williams-Daniel Fertig-Lino Walling 1091 
Charles Johnson-Donald Williams-Daniel Fertig-Lino Walling-Jim Cooke 318 

원하는 출력 유형 :

을 (-) 나는 마침내 포기까지 나는 꽤 오랫동안이에 붙어있다 기능 그리고 나는 .split를 사용하려면
{ 
    "name": "flare", 
    "children": [{ 
     "name": "analytics", 
     "children": [{ 
      "name": "cluster", 
      "children": [{ 
       "name": "AgglomerativeCluster", 
       "size": 3938 
      }, { 
       "name": "CommunityStructure", 
       "size": 3812 
      }, { 
       "name": "HierarchicalCluster", 
       "size": 6714 
      }, { 
       "name": "MergeEdge", 
       "size": 743 
      }] 
     } 
    }]] 
} 
+0

수정 들여 쓰기 귀하의 예제 – gawi

+0

의 : 당신은 항상 두 개의 탭으로 구분 된 열이 당신의 코드를 그런 식으로 볼 수 있었다 단 하나 개의 루트가 있다고 가정하면 라인, 어디서 열입니까? – gawi

+0

여기에 Excel 파일을 첨부 할 수있는 방법이 있습니까, 숫자 부분은 두 번째 열이지만 그저 복사하여 붙여 넣을 때 유용합니다. – feeks

답변

1

모든 단일 행을 구문 분석 할 때 재귀를 사용해야합니다. 당신이 당신의 엑셀 파일을 두 개의 열, 내가 무엇을 볼 수있는 것은 하나를 가지고 언급

//example data 
var str = "Charles Johnson\t4184\nCharles Johnson-Donald Williams\t8385\nCharles Johnson-Donald Williams-Daniel Fertig\t428\nCharles Johnson-Donald Williams-Daniel Fertig-Lino Walling\t1091\nCharles Johnson-Donald Williams-Daniel Fertig-Lino Walling-Jim Cooke\t318"; 
var lines = str.split("\n"); 

var name_ = lines[0].split("\t")[0]; 
var val_ = lines[0].split("\t")[1]; 
var obj = {name:  name_, 
      children: [], 
      value: val_}; 
//process all lines 
for (var i=1;i<lines.length;i++) { 
    var addr = lines[i].split("\t")[0].split("-"); 
    var val = lines[i].split("\t")[1]; 
    var local_obj = obj; 
    var recursive_obj; 
    for (var j=1;j<addr.length;j++) { 
    recursive_obj = null; 
    for (var k=0;k<local_obj.children.length;k++) { 
     if (local_obj.children[k].name==addr[j]) { 
     recursive_obj=local_obj.children[k]; 
     } 
    } 
    if (recursive_obj==null) { 
     recursive_obj = {name:  addr[j], 
         children: [], 
         value: null 
         }; 
     local_obj.children.push(recursive_obj); 
    } 
    local_obj=recursive_obj; 
    } 
    recursive_obj.value=val; 
} 

//print a json result 
alert(JSON.stringify(obj)); 
+0

@ gawi .. 감사합니다. 매우 귀찮았습니다. 코드로이 작업을 할 수 있다고 생각합니다. 신속한 응답과 도움을 환영합니다. :) – feeks

+0

@ Gawi, 출력이 jsonlist.com인지 확인했습니다. 올바른 json 형식이 아님 :/... 마지막 크기 값에 오류가 발생합니다. – feeks

+0

@Khan JSON.stringify는 자바 스크립트 용 표준 JSON 변환기이므로 올바른 json 문자열을 가져야합니다. 정확한 오류는 무엇입니까? – gawi

관련 문제