使用jQuery获取JSON对象中元素的数量

6

可能是重复问题:
在jquery中查找数组的长度(大小)

我从一个php文件中得到了一个json对象,如下所示:

{"food":[
    {
        "name"       :"Belgian Waffles",
        "price"      :"$5.95",
        "description":"two of our famous Belgian Waffles with plenty of real maple syrup",
        "calories"   :"650"
    },
    {
        "name"       :"Strawberry Belgian Waffles",
        "price"      :"$7.95",
        "description":"light Belgian waffles covered with strawberries and whipped cream",
        "calories"   :"900"
    },
    {
        "name"       :"Berry-Berry Belgian Waffles",
        "price"      :"$8.95",
        "description":"light Belgian waffles covered with an assortment of fresh berries and whipped cream",
        "calories"   :"900"
    }
]}

这实际上是从对象中返回三个食品元素。如果json数据是动态的且不知道如何使用jquery获取返回的元素总数,该怎么办?


3
实际上有三种食物成分! - Ram
3个回答

16

假设您已经解析了JSON(或使用jQuery的Ajax函数时,它将为您完成),并且您已经将结果对象存储在变量中,只需执行以下操作:

假定您已经解析了JSON(或者jQuery已经为您完成了这项工作,如果您使用其Ajax函数),并且您有一个包含结果对象的变量,请执行以下操作:

var data = /* your parsed JSON here */
var numberOfElements = data.food.length;

(注意:JSON对象并不存在:在解析 JSON 前它是一个字符串,在解析后它是一个对象。)

编辑:在评论中,您说您不知道属性名为food - 如果您知道将只有一个属性且该属性将是一个数组,则可以执行以下操作:

var data = /* your object */
var propName;
var numberOfElements;
for (propName in data);
numberOfElements = propName ? data[propName].length : 0;

如果您不知道将会有一个属性,那么您的要求就过于模糊了:如果可能会有多个属性,您想检查哪一个属性的长度?


1
不客气。请注意,我代码的最后一行中的 ? : 测试是为了允许可能没有属性的空对象。如果您知道总会有一个属性,请直接写成 numberOfElements = data[propName].length;... - nnnnnn

6
var json = '{"food":[{"name":"Belgian Waffles","price":"$5.95","description":"two of our famous Belgian Waffles with plenty of real maple syrup","calories":"650"},{"name":"Strawberry Belgian Waffles","price":"$7.95","description":"light Belgian waffles covered with strawberries and whipped cream","calories":"900"},{"name":"Berry-Berry Belgian Waffles","price":"$8.95","description":"light Belgian waffles covered with an assortment of fresh berries and whipped cream","calories":"900"}]}';

var obj = JSON.parse(json);

alert(obj.food.length);​

演示: http://jsfiddle.net/XhG6L/

请注意,IE8及以下版本不支持JSON,但可以使用polyfill进行支持。

另外,需要注意的是,jQuery在这里并没有起到作用 - 这只是普通的JavaScript。


这一切都很好,但是对于动态目的,我可能不知道元素“food”? - mjsey
你的意思是说,你不知道属性名称? - ahren
2
我建议您重新审视结构。更一致的键将使未来的事情变得更加容易。也许可以尝试使用类似这样的结构:{categoryName: "food", items: [{name: '',}, ...]}。 - James S

0
如何在使用jQuery时获得动态且未知的JSON数据返回的元素总数?
您可以使用length属性来获取计数。此属性应在食品项目上调用。由于食品返回三个项目,因此您可以使用data.food.length; 其中data是全局对象。
另外,请确保您的JSON有效。尽管看起来有效,但似乎存在手动换行符的情况下它将失败:

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接