रणनीति आप जो चाहते हैं उसके अनुरूप एक नई खाली डेटा संरचना बनाना है, और फिर पूरे मूल डेटासेट के माध्यम से इसे भरकर भरें। यहां कोड है:
var data = [
{ "dep": "d1", "name": "name1", "size": "size1" },
{ "dep": "d1", "name": "name2", "size": "size2" },
{ "dep": "d2", "name": "name1", "size": "size3" },
{ "dep": "d2", "name": "name2", "size": "size4" }
]
var newData = {"name": "root", "children": {}}
data.forEach(function (d) {
if (typeof newData.children[d.dep] !== 'undefined') {
newData.children[d.dep].children.push(d)
} else {
newData.children[d.dep] = {"name": d.dep, "children": [d]}
}
})
newData.children = Object.keys(newData.children).map(function (key) {
return newData.children[key];
});
अंत में असाइनमेंट ऑब्जेक्ट को सरणी में बदलना है।
कौन सा newData
के लिए वांछित परिणाम देता है:
{
"name": "root",
"children": [
{ "name": "d1",
"children": [
{ "dep": "d1", "name": "name1", "size": "size1" },
{ "dep": "d1", "name": "name2", "size": "size2" }
]
},
{ "name": "d2",
"children": [
{ "dep": "d2", "name": "name1", "size": "size3" },
{ "dep": "d2", "name": "name2", "size": "size4" }
]
}
]
}
jsFiddle:http://jsfiddle.net/chrisJamesC/eB4jF/
नोट: इस विधि नेस्टेड संरचनाओं के लिए काम नहीं करता। नेस्टेड संरचनाओं के लिए ऐसा करना कठिन होगा लेकिन आप हमेशा एक पुनरावर्ती कार्य का उपयोग कर सकते हैं।
संपादित करें: उसके जवाब में @imarane ने सुझाव दिया रूप में, आप d3.nest() जो तरीका बेहतर मेरे हाथ समाधान किया जाता है का उपयोग कर सकते हैं। आप इस प्रकार अपना जवाब स्वीकार कर सकते हैं। कौन दे
var data = [
{ "dep": "d1", "name": "name1", "size": "size1" },
{ "dep": "d1", "name": "name2", "size": "size2" },
{ "dep": "d2", "name": "name1"},
{ "dep": "d2"}
]
var newData = {
"key":"root",
"children":
d3.nest()
.key(function(d){return d.dep})
.key(function(d){return d.name})
.key(function(d){return d.size})
.entries(data)
}
: यह के साथ खेल से, यह भी सच में घोंसला के कई स्तरों के लिए आसान था
{"key":"root","children":[
{"key":"d1","values":[
{"key":"name2","values":[
{"dep":"d1","name":"name2","size":"size1"},
{"dep":"d1","name":"name2","size":"size2"}
]}
]},
{"key":"d2","values":[
{"key":"name1","values":[
{"dep":"d2","name":"name1"}
]},
{"key":"undefined","values":[
{"dep":"d2"}
]}
]}
]}
निम्नलिखित में से कौन डेटा संरचना (मैं बेहतर आशा है कि पूरे मुद्दे को समझने के लिए):
var data = [
{ "dep": "d1", "name": "name2", "size": "size1" },
{ "dep": "d1", "name": "name2", "size": "size2" },
{ "dep": "d2", "name": "name1"},
{ "dep": "d2"}
]
JsFiddle:http://jsfiddle.net/chrisJamesC/eB4jF/2/
नेस्ट पर अधिक:http://bl.ocks.org/phoebebright/raw/3176159/
FYI करें, आप JSON, जब आप इसे परिवर्तित रूप में डेटा प्राप्त हो सकती है, जबकि, आप JavaScript वस्तुओं और सरणियों के साथ काम कर रहे हैं। इस बिंदु पर समस्या JSON के साथ अब कुछ भी नहीं है। –
http://stackoverflow.com/questions/17847131/generate-multilevel-flare-json-data-format-from-flat-json यह आपके उद्देश्य को हल करना चाहिए। –
आपने आरंभिक जेसन डेटा संरचना कैसे बनाई? क्या आपके पास डेटा स्रोत है और डेटा में जोड़ा गया है? या बस कड़ी कोड? –