我有一个想要修改的json对象。这是数据:
var data1 = {
"a@1.0.3": {
"b@2.3.0": {
"c@2.0.0": {
"d@0.4.0": {
"e@1.1.1": {}
},
"f@0.5.3": {}
},
"j@2.15.2": {
"x@1.2.3": {}
}
},
"i@1.5.8": {}
}
};
基本上对于每个键,'@'
的左侧我想要添加字符右侧和右侧的每个数字的char +,将所有'.'
替换为'-'
。例如,如果密钥是' abcd@1.12.4
',我的新密钥将为'abcd17@1-12-4'
。
对于这个例子,我想要这个结果:
var data2 = {
"a4@1-0-3": {
"b5@2-3-0": {
"c2@2-0-0": {
"d4@0-4-0": {
"e3@1-1-1": {}
},
"f8@0-5-3": {}
},
"j19@2-15-2": {
"x6@1-2-3": {}
}
},
"i14@1-5-8": {}
}
};
你可以帮忙吗?
答案 0 :(得分:2)
Here是一个工作小提琴。代码是:
var data1 = {
"a@1.0.3": {
"b@2.3.0": {
"c@2.0.0": {
"d@0.4.0": {
"e@1.1.1": {}
},
"f@0.5.3": {}
},
"j@2.15.2": {
"x@1.2.3": {}
}
},
"i@1.5.8": {}
}
};
console.log(JSON.stringify(fixData(data1)));
function fixData(data) {
var result = {};
for (var key in data) {
if (data.hasOwnProperty(key)) {
if (key.indexOf("@") == -1)
continue; // Ignore keys without @'s
var parts = key.split("@");
var left = parts[0];
var right = parts[1];
// Replace .'s with -'s
while (right.indexOf(".") > -1) {
right = right.replace(".", "-");
}
// Add up values
var num = 0;
var splits = right.split("-");
for (var i = 0; i < splits.length; i++) {
var chars = splits[i];
if (!isNaN(chars)) {
num += parseInt(chars);
}
}
left += num;
// Replace key
var existing = data[key];
result[left+"@"+right] = fixData(existing);
}
}
return result;
}
这给出了:
{
"a4@1-0-3":{
"b5@2-3-0":{
"c2@2-0-0":{
"d4@0-4-0":{
"e3@1-1-1":{
}
},
"f8@0-5-3":{
}
},
"j19@2-15-2":{
"x6@1-2-3":{
}
}
},
"i14@1-5-8":{
}
}
}