我有一个从Web服务返回的字符串st
。我将字符串转换为对象,我如何计算否。里面的数组? (对于这种情况,它是 2 )
var st = "{[{"Name": "fake", "Address": "add"]},[{"Name": "fake", "Address": "add"}]}";
var json = eval(st);
json.length
始终返回 1
答案 0 :(得分:17)
@ coure06我改变了一点你的JSON。希望这会有用
var persons = {
"person1" : {
"Name": "Adam",
"Address": "USA"
},
"person2" : {
"Name": "Jamie",
"Address": "USA"
}
};
var count = 0;
//var count = persons.length; // wont work
for ( property in persons ) // should return 2
{
if(persons.hasOwnProperty(property))
{
count++;
}
}
答案 1 :(得分:5)
我很惊讶json.length
正在返回任何东西; JSON字符串无效。最外面的花括号({}
)表示一个对象,它必须包含键和值,但它只包含一个值(数组,没有键)。
如果删除花括号,它应该可以正常工作。你把它们放在那里,也许是因为你看到它了吗?如果是这样,你需要括号(()
),而不是大括号。
请注意,在JSON字符串上使用eval
是不安全的,您希望使用不使用eval
的JSON解码器(例如json2.js,它使用eval
,但只有在非常小心地确保安全之后,必要时进行修改,以获得最佳安全性。括号有帮助,但它们根本不是一个完整的解决方案。
答案 2 :(得分:2)
这就是诀窍!
var jsonString = "{field1:'data1',field2:'data2',arrField1:['arrField1Content1','arrField1Content2']}";
var obj = eval('(' + jsonString + ')');
var objCount=0;
for(_obj in obj) objCount++;
alert(objCount);
答案 3 :(得分:1)
尝试使用它,
var persons = {
"person1" : {
"Name": "Adam",
"Address": "USA"
},
"person2" : {
"Name": "Jamie",
"Address": "USA"
}
};
Object.prototype.count = function() {
var that = this,
count = 0;
for(property in that) {
if(that.hasOwnProperty(property)) {
count++;
}
}
return count;
};
alert(persons.count());
这可以用于嵌套对象,如
var persons = {
"person1" : {
"Name": "Adam",
"Address": "USA"
},
"person2" : {
"Name": "Jamie",
"Address": "USA" ,
"users": {
"person1" : {
"Name": "Adam",
"Address": "USA"
},
"person2" : {
"Name": "Jamie",
"Address": "USA"
}
}
}
};
alert(persons.person2.users.count());
答案 4 :(得分:-1)
编辑 - 现在我已经将它推向了未来,可以使用Object.keys()
,Object.getOwnPropertyNames()
和Object.getOwnPropertySymbols
等API来获取对象中属性的数量:
var props = Object.getOwnPropertySymbols(someObject);
var length = props.length; // number of properties
根据我的经验,我很少关心对象中的属性数量;通常,如果您不知道对象已经是什么,那么您对特定属性(按名称)感兴趣。但是使用这些API并没有错。