我有以下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
}
]
}
};
我想使用以下方法来满足需要:
我希望在格式良好的<ul> <li>
中显示上述值。
另外,如果我将它放在外部.json文件中,请建议我上面的JSON数据是什么样的?
答案 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 in和hasOwnProperty,在您的情况下,您有一个嵌套对象,其中属性/键subject
是一个数组如果我想访问first_name
student1
,我会写students.student1.first_name
,如果我想打印name
subject
student1
1}}我会写students.student1.subject[0].name
下面是一个示例脚本,用于打印所有学生及其主题和标记以及个人信息,因为嵌套JSON
我使用的是嵌套for in
,尽管嵌套迭代不一定是坏的事情,甚至许多着名的算法都依赖于它们。但是你必须非常谨慎地在嵌套循环中执行什么。
为了理解和保留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
}
]
}
};
$("#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;