1

以这个 Json 对象为例:

var x = $.parseJSON("[{\"name\":\"bob\",\"age\":\"23\"},{\"name\":\"mary\",\"年龄\":\"30\"}]");

(注意所有的\"。我不喜欢使用单引号。继续起诉我。)

我最终要的是一个动态生成的 HTML 表,它基于我的 Json 对象的数据和结构(想想许多 WebForms 网格的 AutoGenerateColumns 属性)。要创建标题,我将遍历每个成员并使用成员名称创建标题列。这样,我需要做的就是在我的 WebMethod 调用中从 SQL 中添加或删除列,并且表将自动更新。

解决方案

这个 JS 做到了:

        var x = $.parseJSON("[{\"name\":\"bob\",\"age\":\"23\"},{\"name\":\"mary\",\"age\":\"30\"}]");

        $.each(x, (function (key, value) {
            $.each(x[key], function (key2, value2) {
                alert(key2 + " " + x[key][key2]);
            });
        }));

我没有在 JS 中做太多的循环,所以让我感兴趣的一件事是关键。在 .NET 中,foreach循环遍历集合中的对象。在 JS 中,for遍历索引,因此我必须像x[key][key2].

4

2 回答 2

1

jQuery$.each可以做到这一点,原生 javascript “foreach”(又名for...in)也可以。两者都为您提供了迭代对象键的能力。因此,对于您的示例:

var columns = []; // column holder
// grab first element (assuming they all have the same columns)
var first = x[0];
// iterative over eahc property and add it to our columns list
for (var key in first){
  columns.push(key);
}

现在列会有['name','age'].

于 2013-05-31T18:08:33.170 回答
0
var x = $.parseJSON("[{\"name\":\"bob\",\"age\":\"23\"},{\"name\":\"mary\",\"age\":\"30\"}]");

for (var prop in x) {
  if (x.hasOwnProperty(prop) {
    ..
  }
}

需要注意的重要一点是hasOwnProperty方法。此方法检查它是否是直接来自x或来自任何对象x(例如Object)的属性。

于 2013-06-03T12:41:29.463 回答