我今天刚刚发现了JSON但是我正确地使用它时遇到了问题。我真的找不到解决方案......
基本上,我只想计算数组的元素(计算所有dM),并包装特定元素(例如dM1)。
以下是我的代码,以便您了解:http://jsfiddle.net/dRycS/9/
答案 0 :(得分:3)
你所拥有的是不数组;它是一个对象。数组对象执行具有“长度”属性,但对象不具有。
目前尚不清楚你想要什么;如果你想计算“dMContent”中每个对象的每个属性,你就会写一些东西来递归计算。对于对象的单个“层”,这样的东西可能是你想要的:
function objectSize(obj) {
var count = 0;
for (var k in obj) {
if (obj.hasOwnProperty(k)) ++count;
}
return count;
}
答案 1 :(得分:3)
添加@Pointy所说的是你的代码修改: JSFiddle Demo
Object.size = function(obj) {
var size = 0, key;
for (key in obj) {
if (obj.hasOwnProperty(key)) size++;
}
return size;
};
var dMContent = {
"dM1" : [
{
"name" : "EeEeEeEe",
"link" : "http://test.com"
},
{
"name" : "FfFfFfFf",
"link" : "http://test.com"
},
{
"name" : "GgGgGgGg",
"link" : "http://test.com"
}
],
"dM2" : [
{
"name" : "EeEeEeEe",
"link" : "http://test.com"
},
{
"name" : "FfFfFfFf",
"link" : "http://test.com"
}
],
"dM3" : [
{
"name" : "EeEeEeEe",
"link" : "http://test.com"
}
]
};
var STORAGE = JSON.stringify(dMContent);
var parsed = JSON.parse(STORAGE);
// WHAT I WANT TO DO
// Count the number of dM
console.log(Object.size(parsed)); //gives you 3
//display the content
for(var i in parsed){
console.log('data in ' + i);
for(var j=0; j<parsed[i].length; j++){
console.log(parsed[i][j].name + ' ' + parsed[i][j].link);
}
}
答案 2 :(得分:0)
在您的代码dMContent
中是一个Object,而不是一个数组。
要计算Object中的元素,请执行以下操作:
var i = 0;
for (x in parsed) {
if (parsed.hasOwnProperty(x)) {
i++;
}
}
alert(i);
答案 3 :(得分:0)
试试这个: function objectCount(obj){
objectcount = 0;
$.each(obj, function(index, item) {
objectcount = objectcount + item.length;
});
return objectcount;
}
objectCount(OBJ); 其中obj是一个json对象,json数组作为子对象