2015-04-02 148 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; 
    }); 
}