我想用对象制作JSON字符串。
但是我遇到了一些奇怪的问题。
对象更改以前的值。
我不知道原因..
我的代码是..
var sStr = "L1^P1^Viscosity:vp1,L1^P2^Viscosity:vp2,L1^P3^Viscosity:vp3,L1^P4^Viscosity:vp4,L1^P5^Viscosity:vp5"
var objChild1 = {};
var objChild2 = {};
var objRtn = {};
var arrStr = sStr.split(',');
for (var i = 0; i < arrStr.length; i++) {
var arrSpe = arrStr[i].split('^');
objChild2["" + arrSpe[2].split(':')[0] + ""] = arrSpe[2].split(':')[1];
objChild1["" + arrSpe[1] + ""] = objChild2;
objRtn["" + arrSpe[0] + ""] = objChild1;
}
var sOp = JSON.stringify(objRtn, null, 2);
我认为这个逻辑的结果是
{
"L1": {
"P1": {
"Viscosity": "vp1"
},
"P2": {
"Viscosity": "vp2"
},
"P3": {
"Viscosity": "vp3"
}
...
}
}
这..但结果是
{
"L1": {
"P1": {
"Viscosity": "vp5"
},
"P2": {
"Viscosity": "vp5"
},
"P3": {
"Viscosity": "vp5"
}
...
}
}
我似乎总是在问愚蠢的问题。
但我无人问。
为什么会这样?
让我知道这个问题的关键是什么。
答案 0 :(得分:2)
您每次循环使用相同的objChild1
和objChild2
个对象。您需要每次都创建新对象,但仅限于属性名称尚未创建的对象。
var sStr = "L1^P1^Viscosity:vp1,L1^P2^Viscosity:vp2,L1^P3^Viscosity:vp3,L1^P4^Viscosity:vp4,L1^P5^Viscosity:vp5";
var arrStr = sStr.split(',');
var objRtn = {};
for (var i = 0; i < arrStr.length; i++) {
var arrSpe = arrStr[i].split('^');
var lnum = arrSpe[0];
var pnum = arrSpe[1];
var prop = arrSpe[2].split(':');
var propname = prop[0];
var propval = prop[1];
if (!objRtn[lnum]) {
objRtn[lnum] = {};
}
if (!objRtn[lnum][pnum]) {
objRtn[lnum][pnum] = {};
}
objRtn[lnum][pnum][propname] = propval;
}
console.log(JSON.stringify(objRtn, null, 2));
&#13;