2015-11-02 101 views
0

我有一个任务来遍历包含json数组的复杂json文件。我无法从json文件访问数组对象。使用节点j迭代json数组对象

I need to access the particularly the class-name object from the json file.

classdetail.json

[ [ { "student" : [ 
    { 
    "name" : "AAaa", 
    "class-name" : "A", 
    "grade-label" : "AA" }, 
    { 
    "name" : "AAbb", 
    "class-name" : "A", 
    "grade-label" : "AB" }, 
    { 
    "name" : "AAcc", 
    "class-name" : "A", 
    "grade-label" : "AB" }, 
    { 
    "name" : "AAdd", 
    "class-name" : "B", 
    "grade-label" : "AA" } ], 
     "Average" : 2.5 }, 

     { 
    "student" : [ 
     { 
    "name" : "BBaa", 
    "class-name" : "B", 
    "grade-label" : "AB" }, 
     { 
    "name" : "BBbb", 
    "class-name" : "B", 
    "grade-label" : "AA" }, 
     { 
    "name" : "BBcc", 
    "class-name" : "B", 
    "grade-label" : "AA" }, 
     { 
    "name" : "BBdd", 
    "class-name" : "B", 
    "grade-label" : "AA" } ], 
     "Average" : 2.5 } ] ] 

iterate.js

var fs = require('fs'); 
var express = require('express'); 
var http = require('http'); 
var publicApis; 
var item; 
var subItem; 


classmem = JSON.parse(fs.readFileSync("classdetail.json", "utf8")); 



for (item in classmem) { 
    for (subItem in classmem[item]) { 
    console.log(classmem[item][subItem]); 
    } 
} 
+2

什么是你得到的错误? – Andrius

+0

一切工作正常。 'classmem [item] [subItem] .student'是一个学生数组。 –

+0

即时通讯没有得到任何错误,但我无法访问特定的JSON对象 – Ananth

回答

0
for (item in classmem) { 
    for (subItem in classmem[item]) { 
    var student = classmem[item][subItem].student; 
    for (row in student) { 
     console.log(student[row]['class-name']); 
    } 
    } 
} 

但了解Array.forEach

+0

如果我更改数组名称student-data-details而不是学生im正在获取错误为“数据未定义” ** el.student-data-details.forEach函数(e,i,a)** – Ananth

+0

你不能在变量名中使用减号现在JS解决这个问题(el.student) - (data) - (details.forEach ....) –

0

for...in迭代以任意顺序的对象属性。它可能不是您想要用于数组的按顺序存储项目的数组。 (不过,在这种情况下工作)

尝试Array.forEach()

// iterate over `classmem` 
classmem.forEach(function(element, index, array) { 
    // iterate over classmem[index], which is an array too 
    element.forEach(function(el, idx, arr) { 
    // classmem[index][idx] contains objects with a `.student` property 
    el.student.forEach(function(e, i, a) { 
     console.log(e["name"], e["class-name"], e["grade-label"]); 
    }); 
    }); 
}); 
+0

如果我改变数组名称学生数据的细节,而不是学生即时通讯错误为“数据未定义” ** el.student-data-details .forEach(function(e,i,a)** – Ananth

0

首先检查数值数组,然后进入到“类名”值

for (item in classmem) { 
    for (subItem in classmem[item]) { 
     **if (typeof classmem[item][subItem] === 'object') { 
      classmem[item][subItem].forEach(function (val, ind) { 
       console.log(val['class-name']); 
      }); 
     }** 
    } 
} 
+0

即时获取此错误“TypeError:Object# has not method'forEach'” – Ananth