d3.js中从嵌套对象到层次数据结构的转换



我想将以下嵌套对象转换为分层数据结构

{
"AP":{
"districts":{
"Anantapur":{
"total":{
"confirmed":66593,
"deceased":587,
"recovered":65697
}
},
"Chittoor":{
...
}
}
},
"AR":{
"districts":{....}
}...so on
}

[
{
"name":"AP",
"children":[
{
"name":"Anantapur",
"children":[
{
"name":"confirmed",
"value":66593
},
{
"name":"deceased",
"value":587
},
{
"name":"recovered",
"value":65697
}
]
},
{
...
}
]
},...so on
]

如何做到这一点?。。。我尝试过使用d3嵌套,但没有像这样的通用键值

"state":"AP", "state":"AR". 

这里";AP";以及";AR";是钥匙本身。还有其他方法吗?

您可以使用Object.keys(data).map(function(key) {为对象中的每个属性创建一个包含项的数组。您可以嵌套此方法以获得所需的结果。以下是您的数据结构的手动解决方案(您可以对输出略有不同的任意嵌套数据使用递归函数,但考虑到对象的深度和输出的结构,我还没有这样做(:

var data = { "State One":{
"districts":{
"Region A":{
"total":{
"confirmed":1,
"deceased":2,
"recovered":3
}
},
"Region B":{
"total":{
"confirmed":4,
"deceased":5,
"recovered":6
}
}
}
},
"State Two":{
"districts":{
"Region C":{
"total":{
"confirmed":7,
"deceased":8,
"recovered":9
}
}
}
}
}
var output = Object.keys(data).map(function(key) {
return {
name:key,
children: Object.keys(data[key]["districts"]).map(function(district) {
return {
name:district,
children: Object.keys(data[key]["districts"][district]["total"]).map(function(d) {
return { name: d, value:data[key]["districts"][district]["total"][d] }
})
}
})
}
})
console.log(output);

最新更新