2017-08-30 139 views
0

我的格式为csv文件:转换一个CSV文件转换成JSON,从而获得树状结构,创建一个D3分类树

"","Sequence","Paths","sequence_length" 
"1","Social -> Social -> Social -> Social -> Social -> Social -> Social -> Social",29,8 
"2","Social -> Social -> Social -> Social -> Social -> Social -> Social",30,7 
"3","Social -> Social -> Social -> Social -> Social -> Social",40,6 
"4","Social -> Social -> Social -> Social -> Social",71,5 
"5","Social -> Social -> Social -> Social",156,4 
"6","Social -> Social -> Social",273,3 
"7","Social -> Social -> SEO",40,3 
"8","Social -> Social",729,2 
"9","Social -> SEO -> Social",51,3 
"10","Social -> SEO",180,2 
"11","Social -> SEM",56,2 

我打算将它转换成JSON树的层次结构如下:

{ 
"name": "Social", 
"children": [{ 
    "name": "Social", 
    "children": [{ 
     "name": "Social", 
     "children": [{ 
      "name": "Social", 
      "children": [{ 
       "name": "Social", 
       "children": [{ 
        "name": "Social", 
        "children": [{ 
         "name": "Social", 
         "children": [{ 
          "name": "Social", 
          "Path": 29 
         }] 
        }] 
       }] 
      }] 
     }] 
    }] 
}] 
} 

其中每个接触点即,在每行的CSV文件中用 - >表示的'Social'表示前一个的孩子,并且路径被添加到最后一个节点。

我试图在一个阵列中的社会分裂的事情作为

data.forEach(function(d){ 
var x = d.Sequence.split(' -> '); 

,然后使用这张X解析成JSON.Could请人帮我it.Thanks!

+0

因此,您已经能够将CSV文件转换为对象'数据',这是一个对象数组,每个对象都有'Sequence'属性,这是一个字符串? – trincot

回答

0

我只做了第一行(而不是csv的头部),就像你结果的例子,我认为它是做你想做的。

因此,您只需制作一个项目数组,并通过parseItem传递每个项目。注意:你的最终结果不是一个对象,而是一个数组。

它并不真正需要的,但我做了一个递归函数

所有.innerHTML ...只是说明wha't回事。如果你愿意,删除这些行。

你可以从这里拿走吧?

<div id="log"></div> 
<hr/> 
<div id="result"></div> 
<script> 
    var myitem = ["1", "Social -> Social -> Social -> Social -> Social -> Social -> Social -> Social", 29, 8]; 

    function parseItem(item) { 
     // var id = item[0]; 
     var paths = item[1]; 
     var value = item[2]; 
     // var length = item[3]; 
     var splitPath = paths.split(' -> '); 

     var threeDpath = path2tree(splitPath, value); 
     return threeDpath; 

    } 

    // recursive function 
    function path2tree(paths, value) { 
     // for testing and trying to understand what happens 
     document.getElementById('log').innerHTML += JSON.stringify(paths) + '<br/>'; 

     if (paths.length == 1) { // this will only be true the last time 
      return [{ 
       "name": paths[0], 
       "Path": value 
      }]; 
     } else { 
      // splice paths[0], send the rest to the recursive function 
      var path = paths.splice(0, 1); 
      return [{ 
       "name": path[0], 
       "children": path2tree(paths, value) 
      }]; 
     } 
    } 

    window.onload = function() { 
     var threeDpath = parseItem(myitem); 
     document.getElementById('result').innerHTML = JSON.stringify(threeDpath); 
    } 
</script>