Javascript JSON中的对象计数
我有:Javascript JSON中的对象计数,javascript,json,node.js,Javascript,Json,Node.js,我有: var data = { "conv0": { "id":"d647ed7a5f254462af0a7dc05c75817e", "channelId":"emulator", "user": { "id":"2c1c7fa3", "name":"User1" }, "conversation": { "isGroup":fals
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的帮助下生成的。基本上,它是一个JSON文件,这里有conv0和conv1 JSON对象。我需要计算这个JSON中有多少个对象(conv0、conv1)。
我试着用
Object.keys(data).length
但它计算了所有的键,但我只需要对象。有什么方法可以计算它们吗?如果我理解正确,您有一个数据对象,并且您想计算这个对象的多少属性本身就是对象。如果这是正确的,那么
Object.keys(data).filter(函数(k){returndata[k]instanceof Object}).length
我应该这样做
或者,如果要使用“conv..”名称计算所有属性,则可以使用
Object.keys(data).filter(函数(k){return/^conv/.test(k)}).length
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
}
}
可以使用递归函数对对象进行计数
var obj={
“conv0”:{
“id”:“d647ed7a5f254462af0a7dc05c75817e”,
“channelId”:“仿真器”,
“用户”:{
“id”:“2c1c7fa3”,
“名称”:“User1”
},
“对话”:{
“isGroup”:false,
“id”:“8a684db8”,
“名称”:“Conv1”
},
“机器人”:{
“id”:“56800324”,
“名称”:“Bot1”
},
“服务URL”:http://localhost:9000",
“useAuth”:正确
},
“conv1”:{
“id”:“af77cf19d07749c8aacaed81528abf7a”,
“channelId”:“仿真器”,
“用户”:{
“id”:“2c1c7fa3”,
“名称”:“User1”
},
“对话”:{
“isGroup”:false,
“id”:“8a684db8”,
“名称”:“Conv1”
},
“机器人”:{
“id”:“56800324”,
“名称”:“Bot1”
},
“服务URL”:http://localhost:9000",
“useAuth”:正确
}
}
var c=0;
函数计数(数据){
for(数据中的var p){
if(数据类型[p]=“对象”){
C++;
计数(数据[p]);
}
}
}
计数(obj)
console.log(c)
我假设您正在尝试计数顶级键。如果是,您可以尝试以下方法:
var json = '{"a":{"b":1},"b":{"h":3}}';
var jsonObj = JSON.parse(json);
var c = 0;
for (var i in jsonObj) {
c += 1;
}
c将包含计数您可以编写自己的函数来检查JSON对象中没有对象,或者现代浏览器有方法来计数对象 我假定数据是您的JSON对象,请先更正您的JSON对象(缺少{在'isgroup'之前) 1自定义方法
function check(data){
var count=0;
for(var key in data){
++count;
}
alert("total size : "+count);
}
Object.keys(data).length;
2.现代浏览器方法
function check(data){
var count=0;
for(var key in data){
++count;
}
alert("total size : "+count);
}
Object.keys(data).length;
无效JSONY您的数据无效正确写入在第一个“isGroup”之前添加一个
{
:请添加想要的结果。它返回的是2
(conv0和conv1)。那么您还想要什么呢?谢谢,这真的帮了大忙!