如何遍历以下compex JSON数据并访问其所有值,包括嵌套?

时间:2017-12-21 19:44:27

标签: javascript jquery json

我有以下JSON数据,但我不知道如何遍历它并读取其所有值:

var students = {
  "student1": {
    "first_name": "John",
    "last_name": "Smith",
    "age": 24,
    "subject": [{
        "name": "IT",
        "marks": 85
      },
      {
        "name": "Maths",
        "marks": 75
      },
      {
        "name": "English",
        "marks": 60
      }
    ]
  },
  "student2": {
    "first_name": "David",
    "last_name": "Silva",
    "age": 22,
    "subject": [{
        "name": "IT",
        "marks": 85
      },
      {
        "name": "Maths",
        "marks": 75
      },
      {
        "name": "English",
        "marks": 60
      }
    ]
  }
};

我想使用以下方法来满足需要:

  1. 使用for in循环
  2. 使用简单的for循环
  3. 在jQuery中使用$ .each
  4. 我希望在格式良好的<ul> <li>中显示上述值。

    另外,如果我将它放在外部.json文件中,请建议我上面的JSON数据是什么样的?

1 个答案:

答案 0 :(得分:1)

您可以使用for in循环迭代对象,因为它以任意顺序迭代对象的属性,并且需要使用.hasOwnProperty,除非希望显示继承的属性。

现在关于访问该对象,我们说我有JSON喜欢

var myJson={name:"john",age:22,email:"email@domain.com"};

我需要访问name的值我只需使用.运算符,myJson变量,console.log(myJson.name)将输出john。因为它将被视为一个对象,现在如果我做了一点改变并使对象如下

var myJson=[{name:"john",age:22,email:"email@domain.com"}];

现在,如果您尝试使用上面相同的语句访问属性name的值,则会得到undefined,因为[]现在会将其视为对象(JSON)一个1人或JSON Array的数组,现在,如果您像console.log(myJson[0].name)一样访问它,它会在john中打印console,如果数组中有多个人,该怎么办?那么它将如下所示

var myJson=[
    {name:"john",age:22,email:"john@domain.com"},
    {name:"nash",age:25,email:"nash@domain.com"}
];

console.log(myJson[0].name)将打印john,而console.log(myJson[1].name)将打印nash,因为我在开始时提到应使用for in循环来迭代对象如果我们想打印JSON Array中所有人的姓名,那就像是。

for(var person in myJson){

    console.log(myJson[person].name, myJson[person].age, myJson[person].email);


}

它将在控制台中输出,如下所示

john, 22, john@domain.com
nash, 25, nash@domain.com

我试图保持简单,以便您了解可以查看for inhasOwnProperty,在您的情况下,您有一个嵌套对象,其中属性/键subject是一个数组如果我想访问first_name student1,我会写students.student1.first_name,如果我想打印name subject student1 1}}我会写students.student1.subject[0].name

下面是一个示例脚本,用于打印所有学生及其主题和标记以及个人信息,因为嵌套JSON我使用的是嵌套for in,尽管嵌套迭代不一定是坏的事情,甚至许多着名的算法都依赖于它们。但是你必须非常谨慎地在嵌套循环中执行什么。

为了理解和保留json对象的给定示例,我使用相同的方法制作一个片段。希望它可以帮助你

&#13;
&#13;
var students = {
  "student1": {
    "first_name": "John",
    "last_name": "Smith",
    "age": 24,
    "subject": [{
        "name": "IT",
        "marks": 85
      },
      {
        "name": "Maths",
        "marks": 75
      },
      {
        "name": "English",
        "marks": 60
      }
    ]
  },
  "student2": {
    "first_name": "David",
    "last_name": "Silva",
    "age": 22,
    "subject": [{
        "name": "IT",
        "marks": 85
      },
      {
        "name": "Maths",
        "marks": 75
      },
      {
        "name": "English",
        "marks": 60
      }
    ]
  }
};


$("#print").on('click', function() {
  for (var student in students) {
    console.log(students[student].first_name + '-' + students[student].last_name);
    for (var subject in students[student].subject) {
      console.log(students[student].subject[subject].name, students[student].subject[subject].marks);
    }
  }
  setTimeout('console.clear()', 5000);
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="button" id="print" value="print-now">
&#13;
&#13;
&#13;