获取 JSON 对象的大小

Posted

技术标签:

【中文标题】获取 JSON 对象的大小【英文标题】:get size of JSON object 【发布时间】:2011-10-09 00:35:38 【问题描述】:

我有一个由 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 样本吗? 我不确定,不是我。我认为你的问题也很好。 【参考方案1】:

用这个

Object.keys(jsonObject).length

【讨论】:

length() 不是 JSON 对象函数 @SundingWei 也许你不应该放括号 --- 只是 .length 而不是 .length()。【参考方案2】:

你可以使用这样的东西

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

var count = Object.keys(myObject).length;
console.log(count);

【讨论】:

@Matt,并不是每个代码都必须在 IE 7 或 8 中工作。这些受保护的不足或非标准平台只是缺点。 @OlofuMark 不是每个人都可以选择他们正在使用的浏览器(例如,锁定的网络、内部应用程序使用的版本化 IE DLL 依赖项)。如果适应过时的浏览器需要付出巨大的努力,那么忽略它们是合理的,但在这种微不足道的情况下,不这样做是不礼貌的 @OlofuMark 虽然不需要支持这些版本,但开发人员应该知道他们生成的代码何时不适用于某些版本,以便他们可以决定是否考虑到这一点。 很高兴看到不需要 JSON 具有嵌套数组的解决方案。我认为 JSON 的全部意义在于让一切都成为一个对象。 这是获取 json 对象长度的绝佳解决方案【参考方案3】:

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

    更改您的 JSON 结构(假设这是可能的),以便“电话”变​​为

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

    (请注意,每个电话都没有单词编号标识符,因为它们在索引为 0 的数组中返回)。在此回复中phones.length 将是有效的。

    遍历你的手机对象中包含的对象并在你去的时候计算它们,例如

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

如果您只针对新浏览器选项 2 可能看起来像 this

【讨论】:

鉴于我的 JSON 对象存储在一个名为 jsonObject 的变量中并且我具有与上述相同的 JSON,我如何使用第一个解决方案获取 JSON 对象的长度:“phones”:[ "number":"XXXXXXXXXX","type":"mobile","number":"XXXXXXXXXX","type":"mobile"]【参考方案4】:

试试这个

$.parseJSON(data).length

【讨论】:

【参考方案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);
    );
);

【讨论】:

等待异常告诉您列表中的元素已用完是个坏主意,如果任何元素(甚至最后一个)缺少 TechnologyId,这种方法会默默地给出错误的计数属性 这段代码太糟糕了,我什至不会进一步评论。投票 -1!【参考方案6】:

您不需要更改 JSON 格式。

替换:

console.log(data.phones.length);

与:

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

【讨论】:

【参考方案7】:
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

【讨论】:

这是一个已经解析的 json 对象。如果你执行上面的语句,它会给你一个错误'Unexpected token o in Json'。要计算 json 的长度,您可以直接执行 var length= Object.keys(json).length.【参考方案8】:

考虑使用underscore.js。它将允许您检查大小,即:

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

【讨论】:

以上是关于获取 JSON 对象的大小的主要内容,如果未能解决你的问题,请参考以下文章

GSON:如何从 Json 中获取不区分大小写的元素?

查找 JSON 对象大小而不将其解析为字符串

如何获取jsonarray中 某个值

Oracle SQL:JSON 表;获取数组的大小

C#获取response传输的数据大小

如何获取前端传过来的json对象?