-6

json代码

{
 "pizza":
 {
   "pepperoni lovers":
   {
      "topping": "pepperoni",
      "crust": "hand tossed"
   },

   "sausage lovers":
   {
      "topping": "sausage",
      "crust": "hand tossed"
   }
 }

}

我怎样才能遍历这个并只用名称填充一个数组?

4

4 回答 4

3

一组属性名称?使用这个

var names = Object.keys(data.pizza);
于 2013-04-29T21:05:13.403 回答
1

您可以使用 for...in 遍历对象属性:

a = [];
for (n in pizza) {
    a.push(n);
}
于 2013-04-29T21:07:23.540 回答
1

迭代对象的经典方法是使用for .. in循环。

for (prop in obj) {
    val = obj[prop];
}

这种技术的一个可能的副作用是您不能保证以任何特定的顺序迭代属性。如果您提前知道属性名称,则可以创建一个属性名称数组并进行迭代。

由于您的对象是嵌套的,因此您需要嵌套两个for .. in循环才能彻底迭代:

for (prop in obj) {
    nested_obj = obj[prop];

    for (nested_prop in nested_obj) {
        nested_val = nested_obj[nested_prop];
    }
}

要获取所有属性名称的数组,您可以像这样构建数组:

props = [];

for (prop in obj) {
    props.push(prop);
    nested_obj = obj[prop];

    for (nested_prop in nested_obj) {
        props.push(nested_prop);
        nested_val = nested_obj[nested_prop];
    }
}
于 2013-04-29T21:05:44.677 回答
0

jQuery,假设一个正确的对象

演示

var pizzaNames=[],
    data = { "pizza" : {
      "pepperoni lovers":
    {
       "topping": "pepperoni",
       "crust": "hand tossed"
    },
      "sausage lovers":
      {
       "topping": "sausage",
       "crust": "hand tossed"
      }
   }
}
// $.each is IE8 compatible, Object.keys is not
$.each(data.pizza,function(name,val) {
   pizzaNames.push(name);
});
于 2013-04-29T21:16:33.663 回答