我有一组由PHP json_encode
函数传递的数据。我使用jQuery getJSON
函数对其进行解码:
$.getJSON("url", function (data) {
console.log(data);
});
控制台中的输出如下所示:
Object {1: Object, 2: Object, 3: Object, 4: Object, 5: Object, 6: Object, 7: Object, 8: Object, 9: Object, 10: Object}
我可以使用data[1]
,data[2]
等访问每个数组,但是为了让它更容易,我想到了循环,所以我可以一次访问所有数据:
$.getJSON("url", function (data) {
for (var i = 0, len = data.length; i < len; i++) {
//do something
}
});
但是,由于data.length
返回值undefined
,我无法使用此功能。有什么问题,我该如何解决?
答案 0 :(得分:67)
对象没有.length
属性。
如果您知道不必担心hasOwnProperty
检查,那么这是一个简单的解决方案:
Object.keys(data).length;
如果 支持IE 8或更低版本,则必须使用循环,而不是:
var length= 0;
for(var key in data) {
if(data.hasOwnProperty(key)){
length++;
}
}
答案 1 :(得分:16)
一个选项是:
Object.keys(myObject).length
可悲的是,它不适用于较旧的IE版本(9岁以下)。
如果您需要兼容性,请使用痛苦的版本:
var key, count = 0;
for(key in myObject) {
if(myObject.hasOwnProperty(key)) {
count++;
}
}
答案 2 :(得分:5)
它看起来好像不是数组而是任意对象。如果您可以控制PHP序列化,那么您可以更改它。
作为 raina77ow pointed out,在PHP中执行此操作的一种方法是替换以下内容:
json_encode($something)
有类似的东西:
json_encode(array_values($something))
但请不要忽略此处有关Object.keys
的其他答案。如果你没有能力或想要改变对象的序列化,他们也应该完成你想要的。
答案 3 :(得分:2)
试试这个
Object.keys(data).length
如果IE&lt; 9,你可以用for循环遍历对象
var len = 0;
var i;
for (i in data) {
if (data.hasOwnProperty(i)) {
len++;
}
}
答案 4 :(得分:0)
此问题的一个简单解决方案是在json文件的开头添加“ [”,并以“]”结尾。这为我解决了。