在JSON

时间:2016-09-21 10:26:33

标签: javascript json node.js

我有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

但它计算了所有键,但我只需要对象。有没有办法统计它们?

5 个答案:

答案 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将包含计数