json 国家数据到分层数据的格式
json format of countries data to hierarchal data
我有这个json数据data:[
{'country':'uk','district':'whitefield','ward':'eastward','county':'eastcounty1','company':'privatecompany'},
{'country':'uk','district':'whitefield','ward':'eastward','county':'eastcounty1','company':'privatecompany2'},
{'country':'uk','district':'whitefield','ward':'eastward','county':'eastcounty2','company':'privatecompany3'},
{'country':'uk','district':'whitefield','ward':'westward','county':'westcounty1','company':'privatecompany'},
{'country':'uk','district':'blackfield','ward':'westward','county':'eastcounty1','company':'privatecompany'},
{'country':'india','district':'andhra','ward':'ramnagar','county':'','company':'privatecompany'}
]
我必须将其转换为分层结构,例如..
data:{'uk':{
"whitefield":{
"eastward":{
"eastcounty1":["privateCompany","privateCompany2"],
"eastcounty2":["privatecompany3"]
},
"westward":{
"westcounty1":["privatecompany"],
"eastcounty1":["privatecompany"]
}
},
"blackfield":{
"westward":{"eastcounty1":["privatecompany"]}
}
},
"india":{
"andhra":{
"ramnagar":["privatecompany"]
}
}}
在上述情况下,我在一种情况下使用了 county=" " 或 county=null,因此它已被替换为如上图所示的 ramnagar 病房。
您只需要遍历每个项目并构建您的 json 对象 Fiddle here
function mergeData(data) {
var outp = {};
// loop through each object and add
for (var i = 0; i < data.length; i++) {
var obj = data[i];
if (outp.hasOwnProperty(obj.country)) {
if (outp[obj.country].hasOwnProperty(obj.district)) {
if (outp[obj.country][obj.district].hasOwnProperty(obj.ward)) {
if (outp[obj.country][obj.district][obj.ward].hasOwnProperty(obj.county)) {
outp[obj.country][obj.district][obj.ward][obj.county].push(obj.company);
}
else {
if (obj.county == "" || obj.county == null) {
if (Array.isArray(outp[obj.country][obj.district][obj.ward])) {
outp[obj.country][obj.district][obj.ward].push(obj.company);
}
else {
outp[obj.country][obj.district][obj.ward] = [obj.company];
}
}
else {
outp[obj.country][obj.district][obj.ward][obj.county] = [obj.company];
}
}
}
else {
outp[obj.country][obj.district][obj.ward] = {};
outp[obj.country][obj.district][obj.ward][obj.county] = [obj.company];
}
} else {
outp[obj.country][obj.district] = {};
outp[obj.country][obj.district][obj.ward] = {};
outp[obj.country][obj.district][obj.ward][obj.county] = [obj.company];
}
} else {
outp[obj.country] = {};
outp[obj.country][obj.district] = {};
if (obj.county == "") {
outp[obj.country][obj.district][obj.ward] = [obj.company];
}
else {
outp[obj.country][obj.district][obj.ward] = {};
outp[obj.country][obj.district][obj.ward][obj.county] = [obj.company];
}
}
}
console.log(JSON.stringify(outp));
return outp;
}
function doMerge() {
var data = [{
'country': 'uk',
'district': 'whitefield',
'ward': 'eastward',
'county': 'eastcounty1',
'company': 'privatecompany'
}, {
'country': 'uk',
'district': 'whitefield',
'ward': 'eastward',
'county': 'eastcounty1',
'company': 'privatecompany2'
}, {
'country': 'uk',
'district': 'whitefield',
'ward': 'eastward',
'county': 'eastcounty2',
'company': 'privatecompany3'
}, {
'country': 'uk',
'district': 'whitefield',
'ward': 'westward',
'county': 'westcounty1',
'company': 'privatecompany'
}, {
'country': 'uk',
'district': 'blackfield',
'ward': 'westward',
'county': 'eastcounty1',
'company': 'privatecompany'
}, {
'country': 'india',
'district': 'andhra',
'ward': 'ramnagar',
'county': '',
'company': 'privatecompany'
}];
mergeData(data);
}
<button onclick="doMerge()">Merge</button>
我有这个json数据data:[
{'country':'uk','district':'whitefield','ward':'eastward','county':'eastcounty1','company':'privatecompany'},
{'country':'uk','district':'whitefield','ward':'eastward','county':'eastcounty1','company':'privatecompany2'},
{'country':'uk','district':'whitefield','ward':'eastward','county':'eastcounty2','company':'privatecompany3'},
{'country':'uk','district':'whitefield','ward':'westward','county':'westcounty1','company':'privatecompany'},
{'country':'uk','district':'blackfield','ward':'westward','county':'eastcounty1','company':'privatecompany'},
{'country':'india','district':'andhra','ward':'ramnagar','county':'','company':'privatecompany'}
]
我必须将其转换为分层结构,例如..
data:{'uk':{
"whitefield":{
"eastward":{
"eastcounty1":["privateCompany","privateCompany2"],
"eastcounty2":["privatecompany3"]
},
"westward":{
"westcounty1":["privatecompany"],
"eastcounty1":["privatecompany"]
}
},
"blackfield":{
"westward":{"eastcounty1":["privatecompany"]}
}
},
"india":{
"andhra":{
"ramnagar":["privatecompany"]
}
}}
在上述情况下,我在一种情况下使用了 county=" " 或 county=null,因此它已被替换为如上图所示的 ramnagar 病房。
您只需要遍历每个项目并构建您的 json 对象 Fiddle here
function mergeData(data) {
var outp = {};
// loop through each object and add
for (var i = 0; i < data.length; i++) {
var obj = data[i];
if (outp.hasOwnProperty(obj.country)) {
if (outp[obj.country].hasOwnProperty(obj.district)) {
if (outp[obj.country][obj.district].hasOwnProperty(obj.ward)) {
if (outp[obj.country][obj.district][obj.ward].hasOwnProperty(obj.county)) {
outp[obj.country][obj.district][obj.ward][obj.county].push(obj.company);
}
else {
if (obj.county == "" || obj.county == null) {
if (Array.isArray(outp[obj.country][obj.district][obj.ward])) {
outp[obj.country][obj.district][obj.ward].push(obj.company);
}
else {
outp[obj.country][obj.district][obj.ward] = [obj.company];
}
}
else {
outp[obj.country][obj.district][obj.ward][obj.county] = [obj.company];
}
}
}
else {
outp[obj.country][obj.district][obj.ward] = {};
outp[obj.country][obj.district][obj.ward][obj.county] = [obj.company];
}
} else {
outp[obj.country][obj.district] = {};
outp[obj.country][obj.district][obj.ward] = {};
outp[obj.country][obj.district][obj.ward][obj.county] = [obj.company];
}
} else {
outp[obj.country] = {};
outp[obj.country][obj.district] = {};
if (obj.county == "") {
outp[obj.country][obj.district][obj.ward] = [obj.company];
}
else {
outp[obj.country][obj.district][obj.ward] = {};
outp[obj.country][obj.district][obj.ward][obj.county] = [obj.company];
}
}
}
console.log(JSON.stringify(outp));
return outp;
}
function doMerge() {
var data = [{
'country': 'uk',
'district': 'whitefield',
'ward': 'eastward',
'county': 'eastcounty1',
'company': 'privatecompany'
}, {
'country': 'uk',
'district': 'whitefield',
'ward': 'eastward',
'county': 'eastcounty1',
'company': 'privatecompany2'
}, {
'country': 'uk',
'district': 'whitefield',
'ward': 'eastward',
'county': 'eastcounty2',
'company': 'privatecompany3'
}, {
'country': 'uk',
'district': 'whitefield',
'ward': 'westward',
'county': 'westcounty1',
'company': 'privatecompany'
}, {
'country': 'uk',
'district': 'blackfield',
'ward': 'westward',
'county': 'eastcounty1',
'company': 'privatecompany'
}, {
'country': 'india',
'district': 'andhra',
'ward': 'ramnagar',
'county': '',
'company': 'privatecompany'
}];
mergeData(data);
}
<button onclick="doMerge()">Merge</button>