解析前:
{
"success": true,
"province_items": [
{
"province_id": 1,
"province_name": "北京",
"city_items": [
{
"city_id": 1,
"city_name": "北京市",
"region_items": [
{
"region_id": 1,
"region_name": "朝阳区"
},
{
"region_id": 2,
"region_name": "海淀区"
}
]
}
]
},
{
"province_id": 2,
"province_name": "湖南",
"city_items": [
{
"city_id": 2,
"city_name": "湖南市",
"region_items": [
{
"region_id": 1,
"region_name": "湖区"
},
{
"region_id": 2,
"region_name": "南区"
}
]
}
]
}
]
}
解析后:
[{
value: '110000',
text: '北京市',
children: [{
value: "110101",
text: "北京市",
children: [{
value: "110101",
text: "东城区"
}, {
value: "110102",
text: "西城区"
}]
}]
}, {
value: '120000',
text: '天津市',
children: [{
value: "120100",
text: "天津市",
children: [{
value: "120101",
text: "和平区"
}, {
value: "120102",
text: "河东区"
}]
}]
}]
使用递归算法进行拆分!
var array=[['province_id','province_name','city_items'],['city_id','city_name','region_items'],['region_id','region_name']];//由于不规则的JSON,特地定义了键名
Data1=eval("("+源数据+")"); //转换成数组
var arr=Data1['province_items'];//获取需要的数组
Data1=eval("(["+getJson(arr,0)+"])");//调用递归进行拆分组装
console.log(Data1);//调试输出
/**
*第一个参数Arr 源数组
*第二个参数 $id 这个是记录该调用层是第几层 初始传递0 每调用一次,+1 达到了。对应的层次数
*/
function getJson(arr,$id){
var str='';
for(var i=0;i<arr.length;i++) {
if (typeof(arr[i]) == 'object') {
//console.log(arr[i]);
if($id==2){
str += '{value:"'+arr[i][array[$id][0]]+'",text:"'+arr[i][array[$id][1]]+'"}';
if(i<arr.length-1){
str +=',';
}
}else{
str += '{value:"'+arr[i][array[$id][0]]+'",text:"'+arr[i][array[$id][1]]+'",children:[' + getJson(arr[i][array[$id][2]],$id+1) + ']}';
if(i<arr.length-1){
str +=',';
}
}
}
}
return str;
}
解析成功后的源数据:
[
{
value: "1",
text: "北京",
children: [
{
value: "1",
text: "北京市",
children: [
{
value: "1",
text: "朝阳区"
},
{
value: "2",
text: "海淀区"
}
]
}
]
},
{
value: "2",
text: "湖南",
children: [
{
value: "2",
text: "湖南市",
children: [
{
value: "1",
text: "湖区"
},
{
value: "2",
text: "南区"
}
]
}
]
}
]