2013-07-01 39 views
0
{ 
"name": "Max", 
"value": 107, 
"children": [ 
    { 
    "name": "Don", 
    "value": 60, 
    "children" [ 
    {"name": "CC", "value": 25}, 
    {"name": "Jim", "value": 35} 
    ] 
    }, 
    { 
    "name": "David", 
    "value": 47, 
    "children": [ 
     {"name": "Jeff", "value": 32}, 
     {"name": "Buffy", "value": 15} 
    ] 
    } 
    ] 
} 

如何訪問最內層的兒童名稱與D3?Json d3訪問每個對象

我試着這樣做:

的.text(函數(d){返回d.children空:d.name;});

但它沒有工作....

當我做

的.text(函數(d){回報d.name});

它只顯示外部循環的名稱 - > Don,David。

d3.json('flare.json', function (data) { 

    var canvas = d3.select('p1') 
      .append('svg') 
      .attr('width', 800) 
      .attr('height', 800) 

    var color = d3.scale.category20c(); 

    var data1 = data.children; 

    canvas.selectAll('text') 
       .data(data1) 
       .enter() 
       .append('text') 
       .attr('x', function (d) { return 2; }) 
       .attr('y', function (d, i) { return i * 15; }) 
       .attr('fill', 'black') 
       .style('font-size', '12px') 
       .text(function (d) { return d.children ? null: d.name; }) 

數據我之前↓↓

{ 
"name": "Don", 
"value": 75, 
"children" [ 
      {"name": "CC", "value": 25}, 
      {"name": "Jim", "value": 35} 
    ] 
} 

當數據在這個單一的嵌套形式有,我的代碼工作完美,但是當我做了這雙窩,它不再工作

+0

你可以發佈其餘的代碼? –

回答

1

你需要爲這個遞歸函數 -

function getNames(d) { 
    return d.children ? d.children.map(getNames) : d.name; 
} 

這將返回一個嵌套列表用的名字沒有孩子的元素。

+0

嘿,這有效,但我想要做的是將.text添加到形狀上。如何獲取數據,使其逐個出現,而不是以逗號分隔的大名字 – user2539797

+0

這些名稱將作爲嵌套列表返回。也許你打印結果並自動連接條目? –

+0

是的,我打印出來的結果,但我希望他們打印出來的屬性,2像素的權利和15像素下降每個額外的我 – user2539797