Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/414.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript JSON中的对象计数_Javascript_Json_Node.js - Fatal编程技术网

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)。那么您还想要什么呢?谢谢,这真的帮了大忙!