获取json对象的大小


234

我有一个AJAX请求返回的json对象,而我遇到了一些麻烦,.length因为它一直在返回undefined。只想知道我是否使用正确:

console.log(data.length);
console.log(data.phones.length);

它们undefined都是有效对象,即使它们都返回。

更新:
返回了JSON对象的示例:

{"reqStatus":true,"phones":{"one":{"number":"XXXXXXXXXX","type":"mobile"},"two":{"number":"XXXXXXXXXX","type":"mobile"}}}

您可以发布返回的JSON示例吗?

我不确定,不是我。我认为您的问题也可以。

Answers:


555

你可以用这样的东西

<script type="text/javascript">

  var myObject = {'name':'Kasun', 'address':'columbo','age': '29'}

  var count = Object.keys(myObject).length;
  console.log(count);
</script>

62
@Matt,并不是强制每个代码都可以在IE 7或8中工作。受保护的这些不足或非标准平台仅仅是弊端。
Olofu Mark

5
@OlofuMark不是每个人都可以选择他们正在使用的浏览器(例如,锁定的网络,内部应用程序使用的版本化IE DLL依赖项)。如果容纳过时的浏览器需要显著的努力则忽略它们可以是合理的,但在这样一个微不足道的情况下,这一点,只是粗鲁不
tomfumb

7
@OlofuMark虽然不需要支持这些版本,但是开发人员应该知道他们生成的代码何时在某些版本上不起作用,以便他们可以决定是否考虑到这些。
大卫·纳瓦拉

很高兴看到不需要JSON来嵌套数组的解决方案。我认为JSON的全部目的是使所有内容成为对象。
Healforgreen

这是获取json对象长度的绝佳解决方案
Shaymol Bapary '18

54

您的问题是您的电话对象没有length属性(除非您在返回的JSON中定义它的长度),因为对象与数组不同,即使用作关联数组也是如此。如果phone对象是一个数组,则它将具有长度。您有两个选择(可能更多)。

  1. 更改您的JSON结构(假设可行),以便“电话”变​​为

    "phones":[{"number":"XXXXXXXXXX","type":"mobile"},{"number":"XXXXXXXXXX","type":"mobile"}]

    (请注意,由于每个电话都以0索引的数组返回,因此没有针对每个电话的字号标识符)。在此响应phones.length中将是有效的。

  2. 遍历电话对象中包含的对象,并随即对它们进行计数,例如

    var key, count = 0;
    for(key in data.phones) {
      if(data.phones.hasOwnProperty(key)) {
        count++;
      }
    }

如果您仅定位新浏览器,则选项2可能如下所示


假设我的JSON对象存储在一个名为jsonObject的变量中,并且具有与上述相同的JSON,那么我将如何通过第一个解决方案获取JSON对象的长度:“ phones”:[{“ number”:“ XXXXXXXXXX” ,“ type”:“ mobile”},{“ number”:“ XXXXXXXXXX”,“ type”:“ mobile”}]
Erick

29

考虑使用underscore.js。它将允许您检查尺寸,例如:

var data = {one : 1, two : 2, three : 3};
_.size(data);
//=> 3
_.keys(data);
//=> ["one", "two", "three"]
_.keys(data).length;
//=> 3

24

您无需更改JSON格式。

更换:

console.log(data.phones.length);

与:

console.log( Object.keys( data.phones ).length ) ;

16
var json=[{"id":"431","code":"0.85.PSFR01215","price":"2457.77","volume":"23.0","total":"565.29"},{"id":"430","code":"0.85.PSFR00608","price":"1752.45","volume":"4.0","total":"70.1"},{"id":"429","code":"0.84.SMAB00060","price":"4147.5","volume":"2.0","total":"82.95"},{"id":"428","code":"0.84.SMAB00050","price":"4077.5","volume":"3.0","total":"122.32"}] 
var obj = JSON.parse(json);
var length = Object.keys(obj).length; //you get length json result 4

2
这是一个已解析的json对象。如果执行上述语句,将给您一个错误“ Json中的意外令牌o”。为了计算json的长度,您可以直接执行var length = Object.keys(json).length。
Aayushi



-5
$(document).ready(function () {
    $('#count_my_data').click(function () {
        var count = 0;
        while (true) {
             try {
                var v1 = mydata[count].TechnologyId.toString();
                count = count + 1;
            }
            catch (e)
            { break; }
        }
        alert(count);
    });
});

1
等待异常来告诉您您的列表中的元素已用尽是一个坏主意,如果任何元素(甚至最后一个)缺少该TechnologyId属性,此方法也会默默地给出错误的计数
tomfumb 2014年

1
这段代码太糟糕了,我什至不愿进一步评论。投票为-1!
Georgi-it
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.