问题描述:一个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)
运行前
运行后