【Javascript】解析不规则的JSON返回数据集合!Javascript

解析前:

{
    "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: "南区"
                    }
                ]
            }
        ]
    }
]

转载于:https://my.oschina.net/Peron/blog/737941

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值