【发布时间】:2014-11-30 11:58:00
【问题描述】:
我正在尝试从 JSON 对象中获取值。下面是数据。我正在尝试循环所有数组对象并获取
的值Employee[].gradeDetails.objDetails[].sno
下面是我到目前为止的代码:
var Obj = {
"Employee": [{
"type": "grade A",
"gradeDetails": {
"objDetails": [{
"sno": "100",
"name": "",
"desg": "writer",
"salary": "1000000"
}, {
"sno": "200",
"name": "",
"desg": "developer",
"salary": "1000"
}, {
"sno": "300",
"name": "",
"desg": "",
"salary": "8000"
}]
}
}]
}
var path = "Employee[].gradeDetails.objDetails[].sno";
var arrayPos = [
[0, 0],
[0, 1],
[0, 2]
];
arrayPos.forEach(function(val) {
var data = getField(Obj, path, val);
})
function getField(postObj, path, arrayPosition) {
arrayPosition = arrayPosition.slice(Math.max(arrayPosition.length - 2, 0));
var postObj = JSON.parse(JSON.stringify(postObj));
var pathArray = path.split(".");
pathArray.forEach(function(key) {
if (key.indexOf("[]") != -1) {
var position = 0;
try {
var flag = false;
if (arrayPosition.length == 1) {
flag = true;
}
if (arrayPosition.length > 1) {
position = arrayPosition.shift();
}
var pos = 0;
var arrOcc = -1;
var occIndex = -1;
while (pos != -1) {
pos = path.indexOf("[]", occIndex + 1);
arrOcc += 1;
occIndex = pos;
}
if (arrOcc == 1) {
position = arrayPosition[arrayPosition.length - 1];
console.log("Postion" + position);
}
key = key.substring(0, key.indexOf("["));
postObj = postObj[key];
if (arrOcc == 2) {
if (flag) {
if (postObj.length == 2) {
position = arrayPosition[arrayPosition.length - 1];
}
}
}
if (position == undefined) position = 0;
postObj = postObj[position];
} catch (e) {}
} else {
try {
postObj = postObj[key];
} catch (e) {}
}
});
console.log("Result[" + arrayPosition + "]" + postObj)
return postObj;
}
由于存在三个数组对象,我预计 sno 的三个不同值如下。有人可以帮助我找出我在代码中做错了什么。因为我总是得到 100 的结果。
Result[0]100
Result[1]200
Result[2]300
我的完整代码可在此链接中找到JSFIDDLE
【问题讨论】:
-
在此处发布代码的相关部分。
标签: javascript json multidimensional-array