【问题标题】:Jquery loop through a Json object [duplicate]Jquery循环通过一个Json对象[重复]
【发布时间】:2013-04-29 21:01:11
【问题描述】:

Json 代码

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

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

}

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

【问题讨论】:

  • 这是一个错字,还是您真的错过了每种披萨类型所需的:
  • 这不是有效的 JSON。
  • 不使用 jQuery 作为循环可以省去一些麻烦……
  • @FelixKling 感谢您的链接。我来自 XML 世界。我不知道我可以重组我的代码以在 .json 文件中包含一个数组。这让它变得容易多了。

标签: javascript jquery json


【解决方案1】:

一组属性名称?使用this

var names = Object.keys(data.pizza);

【讨论】:

  • 这是否考虑了内部对象的属性名称?
  • @Rick:不,但我认为 OP 不想要它们 - 我假设他只对披萨名称感兴趣。
  • 聪明。在这些情况下,我总是认为 $.each ......
【解决方案2】:

迭代对象的经典方法是使用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];
    }
}

【讨论】:

  • 他说这个对象来自 JSON(或者可能是一个对象字面量),所以原型链上不会有任何可枚举的东西。
  • 好点,Bergi。旧习惯很难改掉。
  • 另外他只需要top object中的prop而不需要obj[prop]
  • 最后一部分没有明确说明。
【解决方案3】:

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

a = [];
for (n in pizza) {
    a.push(n);
}

【讨论】:

【解决方案4】:

jQuery,假设一个正确的对象

DEMO

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);
});

【讨论】:

  • 如果您不想硬编码“意大利辣香肠爱好者”的名称,您将如何获得仅意大利辣香肠爱好者(顶部、外壳)的值?
  • 我不明白这个问题。你能在这里给我完整的用例吗?
  • 没关系。我来自 XML 世界。我不知道你可以在 Json 中有一个数组。一旦我发现其他一切都到位了。不过感谢您的快速回答。
猜你喜欢
  • 1970-01-01
  • 2021-10-30
  • 1970-01-01
  • 2020-02-16
  • 2014-10-27
  • 2016-10-11
  • 1970-01-01
  • 2012-12-08
  • 2016-06-22
相关资源
最近更新 更多