在 Javascript 中遍历 JSON 对象

Traverse JSON object in Javascript?

本文关键字:JSON 对象 遍历 Javascript      更新时间:2023-09-26

下面是我的代码。 请帮我循环浏览它。 我想循环完整的 JSON 并进行一些验证,但我无法循环访问它。我是第一次这样做,如果有任何1可以帮助我,那就太好了。

有没有办法过滤 JSON 对象。 例如,我想搜索 Auditor1 ASGN 值。 过滤器可以是动态的,就像它可以是审计员 1 或审计员 11 一样。 我还想知道如何将上述 JSON 转换为数组。 这将使我的搜索变得容易(以防无法通过直接 JSON 搜索进行搜索(。

function fnMultiRowValidation(){
      var vStatus = 5,
          vJson = '{"tpaCo":[{"name":"Audit Company1",'
                             "aud":[{"name":"auditor1","asgn":"1","fnds":"1","lead":"1"},'
                                    {"name":"auditor2","asgn":"1","fnds":"0","lead":"1"},'
                                    {"name":"auditor3","asgn":"0","fnds":"1","lead":"0"},'
                                    {"name":"auditor4","asgn":"1","fnds":"1","lead":"0"},'
                                    {"name":"auditor5","asgn":"1","fnds":"1","lead":"0"},'
                                    {"name":"auditor6","asgn":"0","fnds":"1","lead":"0"},'
                                    {"name":"auditor7","asgn":"1","fnds":"1","lead":"0"},'
                                    {"name":"auditor8","asgn":"1","fnds":"1","lead":"0"},'
                                    {"name":"auditor9","asgn":"0","fnds":"1","lead":"0"},'
                                    {"name":"auditor10","asgn":"1","fnds":"1","lead":"0"},'
                                    {"name":"auditor11","asgn":"1","fnds":"1","lead":"0"}]},'
                            {"name":"Audit Company2",'
                             "aud":[{"name":"auditor3","asgn":"1","fnds":"1","lead":"1"},'
                                    {"name":"auditor4","asgn":"1","fnds":"1","lead":"0"}'
                                   ]'
                            }'
                          ]}';
          var vObj =  JSON.parse(vJson);

      for (var i=0;i<vObj.tpaCo.length;i++){
        $.each(vObj.tpaCo[i], function(key, value) { 
              console.log(key +':'+ value);
              if(typeof(value)=='object'){
                 //console.log('Auditor length:'+vObj.tpaCo.value.length);
              }
        });  
      }
    }
vObj.tpaCo.value.length

行不通。您要么必须使用 vObj.tpaCo[key].length 要么value.length.对于初学者来说,您不应该将本机 for 循环与each迭代混合使用。

使用 for-

和 for-in-loops:

for (var i=0; i<vObj.tpaCo.length; i++) { // iterate through outer array
    for (var key in vObj.tpaCo[i]) { // enumerate item keys
         console.log(key +':'+ vObj.tpaCo[i][key]); // logs "name" and "aud"
    }
    console.log('Auditor length:'+vObj.tpaCo[i].aud.length);
    for (var j=0; j<vObj.tpaCo[i].aud.length; j++) { // iterate "aud" array
        console.log(vObj.tpaCo[i].aud[j].name);
    }
}

通过使用变量进行简化:

var tpacos = vObj.tpaCo;
for (var i=0; i<tpacos.length; i++) {
    var comp = tpacos[i];
    for (var key in comp) {
         var value = comp[key];
         console.log(key +':'+ value);
    }
    var auds = comp.aud;
    console.log('Auditor length:'+auds.length);
    for (var j=0; j<auds.length; j++) {
        var aud = auds[j];
        console.log(aud.name);
    }
}

现在使用 Array forEach 方法:

vObj.tpaCo.forEach(function(comp, i) {
    for (var key in comp) {
         var value = comp[key];
         console.log(key +':'+ value);
    }
    console.log('Auditor length:'+comp.aud.length);
    comp.aud.forEach(function(aud, j) {
        console.log(aud.name);
    });
});

有了jQuery的each

$.each(vObj.tpaCo, function(i, comp) {
    $.each(comp, function(key, value) {
        console.log(key +':'+ value);
    });
    console.log('Auditor length:'+comp.aud.length);
    $.each(comp.aud, function(j, aud) {
        console.log(aud.name);
    });
});
  function fnMultiRowValidation(){
  var vStatus = 5,
      vJson = '{"tpaCo":[{"name":"Audit Company1",'
                         "aud":[{"name":"auditor1","asgn":"1","fnds":"1","lead":"1"},'
                                {"name":"auditor2","asgn":"1","fnds":"0","lead":"1"},'
                                {"name":"auditor3","asgn":"0","fnds":"1","lead":"0"},'
                                {"name":"auditor4","asgn":"1","fnds":"1","lead":"0"},'
                                {"name":"auditor5","asgn":"1","fnds":"1","lead":"0"},'
                                {"name":"auditor6","asgn":"0","fnds":"1","lead":"0"},'
                                {"name":"auditor7","asgn":"1","fnds":"1","lead":"0"},'
                                {"name":"auditor8","asgn":"1","fnds":"1","lead":"0"},'
                                {"name":"auditor9","asgn":"0","fnds":"1","lead":"0"},'
                                {"name":"auditor10","asgn":"1","fnds":"1","lead":"0"},'
                                {"name":"auditor11","asgn":"1","fnds":"1","lead":"0"}]},'
                        {"name":"Audit Company2",'
                         "aud":[{"name":"auditor3","asgn":"1","fnds":"1","lead":"1"},'
                                {"name":"auditor4","asgn":"1","fnds":"1","lead":"0"}'
                               ]'
                        }'
                      ]}';
      var vObj =  JSON.parse(vJson);

    $.each(vObj.tpaCo, function(key, value) { 
          console.log(value.name);
    });  
}

删除 for 循环。使用此脚本

要获取 aud 元素,您需要在当前循环中有一个 $.each 函数

我很确定你可以摆脱for循环,只使用

$.each( vObk.tpaCo, function(key, value) {
  console.log(key + ':' + value);
  //... do stuff with value ...
})

你的代码应该是这样的

$.each(vObj.tpaCo, function(key, value) { 
          console.log(key +':'+ value);
          if(typeof(value)=='object'){
             //console.log('Auditor length:'+vObj.tpaCo.value.length);
          }
});

希望它有帮助.....

$.each(vObj.tpaCo, function(key, value) { 
              console.log(value.name+" ")
              for(i=0; i<value.aud.length; i++)
              console.log(value.aud[i]);
        }); 

或者如果您不知道名字

       $.each(vObj, function(key, value){
        $.each(value, function(key, value){
            for(val in value)
                  if(typeof val == 'string')
                    console.log(value[val]
                  else 
                  for(i=0; i<value[val].length ; i++)
                    console.log(value[val][i]);
        });
    });

http://jsfiddle.net/GxER7/