2015-04-02 149 views
-2

我想访问嵌套的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

+0

'SchoolData.SchoolRecord.classX.subject.mathsDept.marks' – adeneo 2015-04-02 17:10:51

+0

您必须遍历每个属性 – adeneo 2015-04-02 17:11:08

+0

我不想按对象访问,我希望在一个语句中使用classX和classIX记录 – 2015-04-02 17:11:56

回答

0

你的第二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]} 
      ]}} 
     ] 
    } 
} 

这是一个完整的猜测,因为我不知道你的数据结构。数组的使用意味着提取数据“应该”更容易。

0

使用下面这行代码。

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 
        } 
       } 
      } 
     }] 
    } 
0

阵列可以做到这一点很容易与_.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; 
    }); 
}