JSON访问和搜索嵌套对象使用jQuery
问题描述:
我想访问嵌套的JSON,例如JSON访问和搜索嵌套对象使用jQuery
var SchoolData = {
"SchoolRecord": {
"classX": {
"name": "Student Name 1",
"subject": {
"mathsDept": {
"subject": "Maths",
"marks": 87
},
"scienceDept": {
"subject": "Physics",
"marks": 55
},
"socialDept": {
"subject": "Social",
"marks": 95
}
}
},
"classIX": {
"name": "Student Name 2",
"subject": {
"mathsDept": {
"subject": "Maths",
"marks": 99
},
"scienceDept": {
"subject": "Physics",
"marks": 95
},
"socialDept": {
"subject": "Social",
"marks": 91
}
}
}
}
}
console.log(SchoolData.SchoolRecord);
console.log(SchoolData.SchoolRecord[0]);
这里是一个FIDDLE。
我想在JSON数据标记SchoolData.marks
答
你的第二console.log
,因为你治疗SchoolData.SchoolRecord
作为一个数组时,它的对象失败。
要获取你需要深入到每类对象的所有标记:
console.log(SchoolData.SchoolRecord.classX.subject.mathsDept);
console.log(SchoolData.SchoolRecord.classX.subject.scienceDept);
console.log(SchoolData.SchoolRecord.classX.subject.socialDept);
console.log(SchoolData.SchoolRecord.classIX.subject.mathsDept);
console.log(SchoolData.SchoolRecord.classIX.subject.scienceDept);
console.log(SchoolData.SchoolRecord.classIX.subject.socialDept);
这是不理想,但它可能会满足您的需求。
如果您对该数据的格式有任何控制权,请考虑使用数组进行结构化。可能是这样的:
var schoolData = {
schoolRecord: {
classes: [
{name: "classX", student: {name: "Student Name 1", subjects: [
{dept: "Maths", subject: "Maths", marks: [99]}
{dept: "Physics", subject: "Physics", marks: [99]}
]}}
]
}
}
这是一个完整的猜测,因为我不知道你的数据结构。数组的使用意味着提取数据“应该”更容易。
答
使用下面这行代码。
SchoolData.SchoolRecord.classX.subject.mathsDept.marks
对于指数读取数据 -
SchoolData.SchoolRecord[0]
你要创建的记录
var SchoolData = {
"SchoolRecord": [{
"classX": {
"name": "Student Name 1",
"subject": {
"mathsDept": {
"subject": "Maths",
"marks": 87
},
"scienceDept": {
"subject": "Physics",
"marks": 55
},
"socialDept": {
"subject": "Social",
"marks": 95
}
}
},
"classIX": {
"name": "Student Name 2",
"subject": {
"mathsDept": {
"subject": "Maths",
"marks": 99
},
"scienceDept": {
"subject": "Physics",
"marks": 95
},
"socialDept": {
"subject": "Social",
"marks": 91
}
}
}
}]
}
答
阵列可以做到这一点很容易与_.each() function in underscorejs。
这里是的jsfiddle解决方案:http://jsfiddle.net/g87g28h5/1/
基本位是在这里:
for(var Class in SchoolData.SchoolRecord) {
_.each(SchoolData.SchoolRecord[Class].subject, function(item) {
var entry = "<li>" + Class;
entry += ": " + item.subject;
entry += " = " + item.marks;
entry += "</li>";
listing.innerHTML = listing.innerHTML + entry;
});
}
'SchoolData.SchoolRecord.classX.subject.mathsDept.marks' – adeneo 2015-04-02 17:10:51
您必须遍历每个属性 – adeneo 2015-04-02 17:11:08
我不想按对象访问,我希望在一个语句中使用classX和classIX记录 – 2015-04-02 17:11:56