5

可能重复: 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 中一个对象的长度以及如何有效地显示它感到非常困惑。我怎样才能做到这一点?

4

5 回答 5

2

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

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

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

于 2012-08-06T07:30:42.083 回答
1

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

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

IE - 开发者工具

Firefox - 萤火虫插件

于 2012-08-06T07:37:07.137 回答
1

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

首先,你有一个数组。

[]

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

[
    {}
]

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

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

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

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

您可以通过以下方式获得该对象中的值的数量:

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

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

于 2012-08-06T07:38:19.630 回答
0

首先,json 的结构不正确 - 一些元素名称缺少引号、逗号在错误的位置、丢失等。将您的与此进行比较:

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

json 比垂直展开更容易校对。然后,使用一个简单的循环:

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

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

于 2012-08-06T07:48:44.043 回答
0

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

data[i].student.name我用过data[i].user.name

这似乎提醒了正确的值

谢谢大家的回复!!

于 2012-08-06T21:10:36.813 回答