使用JavaScript进行JSON解析的最佳方法

可能重复: JavaScript对象的长度(即关联数组)

我有以下格式的JSON

[{"student":{"name" : "ABCD", "age":8, } "user":{ "firstName":"ABCD", "age": 9, } }, {"student":{"name" : "XCYS", "age":10, } "user":{ "firstName":"GGG", "age": 11, } },] 

我尝试使用(data.student[i].length) ,它不起作用(只是为了查看对象的长度),我也试过(data.user[i])无济于事。

我基本上很困惑我如何获得JSON中的一个对象的长度以及如何有效地显示它。 我怎样才能做到这一点?

您的问题中的内容不会解析为有效的JSON,因为所有键都需要用引号括起来(所以你应该有"age": 11而不是age: 11 )。 对象中的所有键/值对都应该用逗号分隔(所以你应该有"firstName": "GGG", "age": 11而不是"firstName": "GGG" "age": 11 。你也有外部数组中的尾随逗号。

只要您拥有有效的JSON,您就应该能够在比IE7更新的所有浏览器中使用JSON.parse(data)将字符串转换为实际对象。 解析为对象后,您可以使用:

 var data = "your JSON string"; var object = JSON.parse(data); console.log(object.length); // the number of objects in the array console.log(object[0].student.name; // the name of the first student 

如果您支持IE7及更早版本的浏览器,请查看Douglas Crockford的JSON polyfill: https : //github.com/douglascrockford/JSON-js

请在某些网站validation您的json字符串http://jsonformatter.curiousconcept.com/

由于javascript是一种脚本语言,它将解释脚本并在语法出现错误时终止解释。 尝试在浏览器中使用一些javascript控制台

IE – 开发人员工具

Firefox – firebug插件

让我们假设您拥有的实际对象是有效的(没有丢失逗号等),并且您已正确解析字符串,您正在尝试访问具有数组索引的对象,反之亦然。 让我们从头开始重建对象:

首先,你有一个数组。

 [] 

您可以使用data[0]访问数组中的第一个元素。 第一个元素是一个对象。

 [ {} ] 

该对象有两个键,它们都保存对象。

 [ { "student": {}, "user": {} } ] 

您可以使用data[0].student访问student密钥。 它包含两个键的对象。

 [ { "student": { "name": "ABCD", "age": 8 }, "user": {} } ] 

您将获得该对象中的值的数量:

 Object.keys( data[0].student ).length; 

要获得更好的浏览器支持,请参阅JavaScript对象的长度

首先,json的结构不正确 – 一些元素名称缺少引号,commsa在错误的位置,缺少等等。将你的比较:

  var json = [{"student":{"name" : "ABCD","age":8}, "user":{ "firstName":"ABCD", "age": 9}}, {"student":{"name" : "XCYS","age":10}, "user":{ "firstName":"GGG", "age": 11}} ]; 

json比垂直展开更容易certificate读取方式。 然后,用一个简单的循环:

  for(var ix in json) { alert(json[ix].student.name +"="+json[ix].student.age); } 

希望你能看到如何去那里。

我想出了如何解析它,看起来很简单

我使用data[i].student.namedata[i].user.name

这似乎提醒了正确的价值

谢谢大家的回复!!