无法计算JSON中特定属性的实例数

时间:2013-07-16 08:17:03

标签: javascript jquery json

我的JSON由ajax请求返回,存储在data变量中。

JSON看起来像这样(顶行是邮政编码/邮政编码,每个请求都不同):

  {
      "ML1 4EQ":{
          "ExchangeCode":"WSMOT",
          "ExchangeName":"MOTHERWELL",
          "Options":{
              "10":{
                  "Preference":"3rd Party Tail (TTB)",
                  "Supplier 1":9591,
                  "Supplier 2":3581,
                  "Wholesale":5200,
                  "RRP":6500
              },

等等其他9个Options

        }
    }
}

我正在尝试计算返回的Options的数量,但我从阅读其他问题尝试的所有内容似乎都无法返回undefined,只返回3而不是{ {1}}(想想我的错误程度)。

这些包括

10

2 个答案:

答案 0 :(得分:6)

这将计算第一个对象内的选项总数。

var count = 0;
for(var key in data){
  for(var i in data[key].Options){
    count++;   
  }
  break;
}

Fiddle

答案 1 :(得分:1)

计算Object中的属性数量并不完全是直截了当的。没有一个属性可以直接告诉你,如果你for...in对它们进行计数,你也会获得继承的属性,所以如果有人在Object.prototype上定义任何东西,你就会得到错误的答案。

在ECMAScript第五版中,你得到getOwnPropertyNames,它返回一组非继承的属性名称:

var options= {'1': 'a', '2': 'b'};
Object.getOwnPropertyNames(options).length; // 2

对于尚不支持第五版的浏览器(主要是IE< = 8),您可以使用它来填充它:

if (!('getOwnPropertyNames' in Object)) {
    Object.getOwnPropertyNames= function(o) {
        var names= [];
        for (var k in o)
            if (Object.hasOwnProperty(k))
                names.push(k);
        return names;
    };
}

但是,如果您可以控制JSON输出的格式,我强烈建议您将Options对象转换为普通数组,这样可以更好地为您的数据建模。使用数组,您只需使用Options.length