我有JSON:
var data = {
"conv0": {
"id":"d647ed7a5f254462af0a7dc05c75817e",
"channelId":"emulator",
"user": {
"id":"2c1c7fa3",
"name":"User1"
},
"conversation": {
"isGroup":false,
"id":"8a684db8",
"name":"Conv1"
},
"bot": {
"id":"56800324",
"name":"Bot1"
},
"serviceUrl":"http://localhost:9000",
"useAuth":true
},
"conv1": {
"id":"af77cf19d07749c8aacaed81528abf7a",
"channelId":"emulator",
"user": {
"id":"2c1c7fa3",
"name":"User1"
},
"conversation": {
"isGroup":false,
"id":"8a684db8",
"name":"Conv1"
},
"bot": {
"id":"56800324",
"name":"Bot1"
},
"serviceUrl":"http://localhost:9000",
"useAuth":true
}
}
它是在node-js-db的帮助下生成的。基本上,它是一个带有conv0和conv1 json obj的JSON文件。我需要计算我在这个JSON中有多少个对象(conv0,conv1)。 我试过用
Object.keys(data).length
但它计算了所有键,但我只需要对象。有没有办法统计它们?
答案 0 :(得分:1)
您可以使用递归函数来计算对象
var obj = {
"conv0": {
"id": "d647ed7a5f254462af0a7dc05c75817e",
"channelId": "emulator",
"user": {
"id": "2c1c7fa3",
"name": "User1"
},
"conversation": {
"isGroup": false,
"id": "8a684db8",
"name": "Conv1"
},
"bot": {
"id": "56800324",
"name": "Bot1"
},
"serviceUrl": "http://localhost:9000",
"useAuth": true
},
"conv1": {
"id": "af77cf19d07749c8aacaed81528abf7a",
"channelId": "emulator",
"user": {
"id": "2c1c7fa3",
"name": "User1"
},
"conversation": {
"isGroup": false,
"id": "8a684db8",
"name": "Conv1"
},
"bot": {
"id": "56800324",
"name": "Bot1"
},
"serviceUrl": "http://localhost:9000",
"useAuth": true
}
}
var c = 0;
function count(data) {
for (var p in data) {
if (typeof data[p] == 'object') {
c++;
count(data[p]);
}
}
}
count(obj)
console.log(c)
答案 1 :(得分:0)
如果我理解正确,你有一个数据对象,并且你想要计算这个对象的多少属性本身就是对象。如果这是正确的那么
Object.keys(data).filter(function(k){return data[k] instanceof Object}).length
应该这样做。
或者,如果您想使用'conv ...'名称计算所有属性,则可以使用
Object.keys(data).filter(function(k){return /^conv/.test(k)}).length
答案 2 :(得分:0)
您可以编写自己的函数来检查JSON对象中没有对象,或者现代浏览器有计算对象的方法。
我假设数据是您的JSON对象,请先更正您的JSON对象(缺少{before'isgroup'之前)
1自定义方法
function check(data){
var count=0;
for(var key in data){
++count;
}
alert("total size : "+count);
}
<强> 2。现代浏览器方法
Object.keys(data).length;
答案 3 :(得分:-1)
JOSN无效,我更正了使用以下JSON
var data = {
"conv0": {
"id": "d647ed7a5f254462af0a7dc05c75817e",
"channelId": "emulator",
"user": { "id": "2c1c7fa3", "name": "User1" },
"conversation": {
"isGroup": false,
"id": "8a684db8",
"name": "Conv1"
},
"bot": { "id": "56800324", "name": "Bot1" },
"serviceUrl": "http://localhost:9000",
"useAuth": true
},
"conv1": {
"id": "af77cf19d07749c8aacaed81528abf7a",
"channelId": "emulator",
"user": { "id": "2c1c7fa3", "name": "User1" },
"conversation": { "isGroup": false, "id": "8a684db8", "name": "Conv1" },
"bot": { "id": "56800324", "name": "Bot1" },
"serviceUrl": "http://localhost:9000",
"useAuth": true
}
}
答案 4 :(得分:-1)
我假设您正在尝试计算顶级键。如果是这样,你可以试试这个:
var json = '{"a":{"b":1},"b":{"h":3}}';
var jsonObj = JSON.parse(json);
var c = 0;
for (var i in jsonObj) {
c += 1;
}
c将包含计数