使用javascript通过动态JSON数据循环

时间:2016-01-29 10:35:29

标签: javascript json

我正在尝试显示JSON数据,但键值是动态的,它从一个POST请求变化到另一个我的数据层次结构如图所示:

这是我正在运行的代码的一部分,任何人都可以建议我如何显示JSON数据,其中redbox中显示的密钥将针对每个POST请求进行更改

$.ajax({
  type: "POST",
  url: "/",
  dataType:'json',
  data : { 'perfid': valueOne, 'hostname': $("#host").val(), 'iteration': valueThree},
  success: function(data) {
    $('#img1').hide();
    var k = data[$("#host").val()].iscsi_lif.result.sectoutput.sect.length; 
    for(var i = 0; i < k; i++) {
                var obj = k[i];
                console.log(obj);
                var iscsi =  parseInt(data[$("#host").val()].iscsi_lif.result.sectoutput.sect.obj.avg_latency);
console.log(iscsi);
             }

在上面的代码段上运行时,我收到以下错误消息:

data [$(....)。val(...)]。iscsi_lif.result.sectoutput.sect未定义

4 个答案:

答案 0 :(得分:1)

您可以使用&#34; for&#34;循环迭代对象的键而不必指定键名。

for( var key in myObject){
  myValue = myObject[key];
  // key will be your dynamically created keyname
}

所以你的代码可能类似于以下内容:

...  
success: function(data) {
  $('#img1').hide();
  var obj = data[$("#host").val()].iscsi_lif.result.sectoutput.sect; 
  for(var key in obj) {
    if(obj.hasOwnProperty(key)){
      var iscsi = parseInt(obj[key].avg_latency);
      console.log(iscsi);
    }
  }
}

答案 1 :(得分:0)

解决方案建议:

for (var key in object) {
    if (object.hasOwnProperty(key)) {
        var element = object[key];

    }
}

然而,在你的情况下,也许你必须多次这样做,所以我会尝试提取一个通用函数来执行此操作并将处理结果“规范化”为不会改变的预期格式。 / p>

该函数仅在存在预期的键时运行,并且由于forin循环使用对象键,因此每个对象都是动态处理的。

答案 2 :(得分:0)

这应该有效:

var k = data[$("#host").val()].iscsi_lif.result.sectoutput.sect;
for (var i = 0; i < k.length; i++) {
  var obj = k[i];
  console.log(obj);
  var iscsi = parseInt(data[$("#host").val()].iscsi_lif.result.sectoutput.sect[obj].avg_latency);
  console.log(iscsi);
}

变量应放在括号内。 另外,在我看来,k被简单地定义为数组的长度,我将其删除并将其放入for循环。

答案 3 :(得分:0)

由于您已将[]定义为变量,因此您应使用[obj],因此它将为var iscsi = parseInt(data[$("#host").val()].iscsi_lif.result.sectoutput.sect[obj].avg_latency); ,例如:

 <div class="menu-push-right-to-left">
            <nav>
              <ul>
                <li><a href="#"><img src="../images/common/icon-logo-quark-3.png" alt=""><span>@ 2015 Yescall.com, Inc.</span></a>
                </li>
                <li><a href="#">- adfasd</a>
                </li>
                <li><a href="#">- asdfasdf</a>
                </li>
                <li><a href="#">- asdfasdf</a>
                </li>
                <li><a href="#">- adsfasdf</a>
                </li>
                <li><a href="#">- adfasdf</a>
                </li>
                <li><a href="#">- adsfasdf</a>
                </li>
                <li><a href="#">- adsfsdfa</a>
                </li>
              </ul>
            </nav>
            <ul class="block-social">
              <li><a href="#"><span class="qa qa-wifi"></span></a>
              </li>
              <li><a href="#"><span class="qa qa-social-facebook"></span></a>
              </li>
              <li><a href="#"><span class="qa qa-social-twitter"></span></a>
              </li>
              <li><a href="#"><span class="qa qa-social-linkedin"></span></a>
              </li>
              <li><a href="#"><span class="qa qa-social-google"></span></a>
              </li>
            </ul>
            <div class="block-contact">
              <h4><a href="#">(asdfasdf</a>
              </h4>
              <p>
                adfasdf
                <br> aadssdfasdf: 1644-0000
                <br> asdfasdf: <a href="mailto:help@quark.band" title="help@quark.band">help@quark.band</a>
              </p>
            </div>
          </div>

希望这有帮助。