2016-07-30 2 views
0

누군가 올바른 방법으로 안내 할 수 있습니까? 입력을 구문 분석 한 후 트리를 작성한 다음에 그것을 트리버스해야합니까?대표 입력에서 json 문자열을 작성하십시오.

입력은 다음과 같은 형태로 주어진다 :

node11/node12/.../node1k 
node21/node22/.../node2n 
... 
nodem1/nodem2/.../nodeml 

샘플 입력 :

a/b/c1 
x/b 
a/b/c/d 
m 

출력 :

{ 
    a: { 
    b: { 
     c: { d: "" }, 
     c1: "" 
     } 
     }, 
    x: { b: "" }, 
    m: "" 
} 

답변

1

다음은 재귀를 사용하여 각 경로를 처리하는 JS 솔루션입니다.

function parse(paths) { 
 
    var resultObj = {}; 
 
    paths.forEach(function(path) { 
 
    var nodes = path.split("/"); 
 
    recurse(nodes, resultObj); 
 
    }); 
 
    console.log(resultObj); 
 
    console.log(JSON.stringify(resultObj)); 
 
} 
 

 
function recurse(path, obj) { 
 
    if (!path.length) 
 
    return obj; 
 
    var node = path.shift(); 
 
    if (!obj.hasOwnProperty(node)) 
 
    obj[node] = path.length ? {} : ""; 
 
    return recurse(path, obj[node]); 
 
} 
 

 
var arr = ["a/b/c1", "x/b", "a/b/c/d", "m"]; 
 
parse(arr);

1

당신이 파이썬에서이 작업을 수행하려면 이것을 할 수 있습니다 :

output = {} 
lines = ["a/b/c1", "x/b", "a/b/c/d", "m"] 
for line in lines: 
    nodePath = line.split('/') 
    current = output 
    for node in nodePath[:-1]: 
     current[node] = {} if node not in current else current[node] 
     current = current[node] 
    current[nodePath[-1]] = "" 

print output # gives us {'a': {'b': {'c1': '', 'c': {'d': ''}}}, 'x': {'b': ''}, 'm': ''} 

그런 다음 원하는대로 출력을 json으로 설정하십시오.