js带点属性解析成对象

问题描述:一个hibernate对象写入jqgrid,然后在将jqgrid行数据读取出来,发现有些属性没有被序列化成对象,这个时候我们需要将带点的属性转换成对象。

var node = {
    lsh: 1,
    brjbxx: {
        xm:'张三',
        zDXBbh:'1',
        vip: {
            jbzh: 0,
            yj:0,
        },
        brywxx: {
            zje:1,
            zjf:0,
        }
    },
    'brjbxx.nl':'18',
    'brjbxx.xm':'张三',
    'brjbxx.zDXBbh':'1',
    'brjbxx.vip.jbzh':'0',
    'brjbxx.vip.yj':'0',
    'brjbxx.brywxx.zje':'1',
    'brjbxx.brywxx.zjf':'0',
    kSid: 10,
    ssmc: '溶脂针',
    ssrq:'2019-01-03',
    mzghjl: {
        lsh:1024,
        ghsj:'2019-01-03',
    },
    'mzghjl.xm':'张三',
    'mzghjl.nl':'18',
};
console.log('---------------->', node)

function json_obj_parse(source) {
    var target = {}, header = '', footer = '', start = 0, flag = true 
    , dotList = [], person = {name: '', arr: [], level: 1};
    // 解析一级属性
    for (var key in source) {
        if (key.indexOf('.') > 0) {
            start = key.indexOf('.');
            header = key.substring(0, start);
            footer = key.substring(start+1);
            person = {name: '', arr: []}, flag = true;
            for (var m = 0; m < dotList.length; m++) {
                if (dotList[m].name === header) {
                    person = dotList[m];
                    flag = false;
                    break;
                }
            }
            person.name = header;// 覆盖名称
            person.arr.push(footer);
            person.level = footer.indexOf('.') > 0 ? 2 : 1;
            if (flag) {
                dotList.push(person);
            }
            continue;
        }
        target[key] = source[key];
    }
    // 处理多级属性
    var temp = {};
    for (var i = 0; i < dotList.length; i++) {
        person = dotList[i];
        temp = {};
        // 处理二级属性
        for (var j = 0; j < person.arr.length; j++) {
            temp[person.arr[j]] = source[person.name + '.' + person.arr[j]];
        }
        // 是否存在该对象,存在就拷贝数据
        if (typeof target[person.name] === "object") {
            for (var key in target[person.name]) {
                temp[key] = target[person.name][key];
            }
        }
        // 处理三级属性
        temp = person.level == 1 ? temp : json_obj_parse(temp);
        // 设置属性对象*****
        target[person.name] = temp;
    }
    return target;
}

var obj = json_obj_parse(node);
console.log(obj)

运行前

运行后

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值