jSon对象计数

时间:2010-03-12 15:17:41

标签: javascript json

我有一个从Web服务返回的字符串st。我将字符串转换为对象,我如何计算否。里面的数组? (对于这种情况,它是 2

var st = "{[{"Name": "fake", "Address": "add"]},[{"Name": "fake", "Address": "add"}]}";  
var json = eval(st);  

json.length始终返回 1

5 个答案:

答案 0 :(得分:17)

@ coure06我改变了一点你的JSON。希望这会有用

var persons = {
    "person1" : {
        "Name": "Adam",
        "Address": "USA" 
    },
    "person2" : {
        "Name": "Jamie",
        "Address": "USA" 
    }
};
var count = 0;
//var count = persons.length;          // wont work
for ( property in persons )          // should return 2
{
   if(persons.hasOwnProperty(property))
   {
      count++;
   }
}

Live example at jsfiddle

答案 1 :(得分:5)

我很惊讶json.length正在返回任何东西; JSON字符串无效。最外面的花括号({})表示一个对象,它必须包含键和值,但它只包含一个值(数组,没有键)。

如果删除花括号,它应该可以正常工作。你把它们放在那里,也许是因为你看到它了吗?如果是这样,你需要括号(()),而不是大括号。

请注意,在JSON字符串上使用eval是不安全的,您希望使用不使用eval的JSON解码器(例如json2.js,它使用eval ,但只有在非常小心地确保安全之后,必要时进行修改,以获得最佳安全性。括号有帮助,但它们根本不是一个完整的解决方案。

答案 2 :(得分:2)

这就是诀窍!

var jsonString = "{field1:'data1',field2:'data2',arrField1:['arrField1Content1','arrField1Content2']}";
var obj = eval('(' + jsonString + ')');

var objCount=0;
for(_obj in obj) objCount++;

alert(objCount);

答案 3 :(得分:1)

尝试使用它,

var persons = {
    "person1" : {
        "Name": "Adam",
        "Address": "USA" 
    },
    "person2" : {
        "Name": "Jamie",
        "Address": "USA" 
    }
};

Object.prototype.count = function() {
    var that = this,
        count = 0;

    for(property in that) {
        if(that.hasOwnProperty(property)) {
            count++;
        }
    }

    return count;
};

alert(persons.count());

这可以用于嵌套对象,如

var persons = {
    "person1" : {
        "Name": "Adam",
        "Address": "USA" 
    },
    "person2" : {
        "Name": "Jamie",
        "Address": "USA" ,
        "users": {
            "person1" : {
                "Name": "Adam",
                "Address": "USA" 
            },
            "person2" : {
                "Name": "Jamie",
                "Address": "USA" 
            }
        }
    }
};

alert(persons.person2.users.count());

答案 4 :(得分:-1)

  1. 这不是有效的JSON表达式。
  2. 没有内置的方法来计算对象的“成员”。你可以写一个,但由于语言的软弱性,这是有问题的。
  3. 编辑 - 现在我已经将它推向了未来,可以使用Object.keys()Object.getOwnPropertyNames()Object.getOwnPropertySymbols等API来获取对象中属性的数量:

    var props = Object.getOwnPropertySymbols(someObject);
    var length = props.length; // number of properties
    

    根据我的经验,我很少关心对象中的属性数量;通常,如果您不知道对象已经是什么,那么您对特定属性(按名称)感兴趣。但是使用这些API并没有错。