繁体   English   中英

Javascript-使用for循环运行JSON对象

[英]Javascript - Running through JSON object using for loop

我是JS的新手,正在尝试遍历以下JSON:

myLogger - myLogger - JSON ARRAY - {"dummmysetsJSONArr":[{"entryID":"1","distance":"100","calories":"50"},{"entryID":"2","distance":"200","calories":"100"},{"entryID":"3","distance":"300","calories":"150"},{"entryID":"4","distance":"400","calories":"200"},{"entryID":"5","distance":"500","calories":"250"},{"entryID":"6","distance":"600","calories":"300"}],"success":1}

但我的控制台行继续打印:

myLogger-未定义-未定义-未定义

我已经看到诸如此类的成功解决方案, 这些解决方案似乎对我不起作用。

我的for循环尝试如下:

    for (var key in jsonarry) {
      if (jsonarry.hasOwnProperty(key)) {
        myLogger(jsonarry[key].entryID + " - " + jsonarry[key].distance + " - " + jsonarry[key].calories);
      }
    }

    /*
    for (var key in jsonarry) {
      if (jsonarry.hasOwnProperty(key)) {
        myLogger(jsonarry[0].entryID + " - " + jsonarry[1].distance + " - " + jsonarry[2].calories);
      }
    }
    */

这是我完整的JS:

    google.load("visualization", "1", {packages:["corechart"]});

google.setOnLoadCallback(drawVisualization);

function drawVisualization() {

  var req = false;
  var jsonarry;

  try {
      // most browsers
      req = new XMLHttpRequest();

      myLogger("myLogger - XMLHttpRequest() created");
  } catch (e){
      // IE
      try{
          req = new ActiveXObject("Msxml2.XMLHTTP");

          myLogger("myLogger - req = new ActiveXObject(Msxml2.XMLHTTP);");          
      } catch (e) {
          // try an older version
          try{
              req = new ActiveXObject("Microsoft.XMLHTTP");

              myLogger("myLogger - req = new ActiveXObject(Microsoft.XMLHTTP);");               
          } catch (e){

          }
      }
  }

  if (!req) { 
    myLogger("req === false");
  } else {

    myLogger("req === true");
  }

  // Use onreadystatechange property
  req.onreadystatechange = function() {

       //myLogger("myLogger - req.onreadystatechange = function(){");

      if(req.readyState == 4) {

          myLogger("myLogger - req.readyState == 4");

          if(req.status === 200) {

            myLogger("myLogger - req.status === 200");

            jsonarry = req.responseText;

            myLogger("myLogger - JSON ARRAY - " + jsonarry);

            myLogger(" ------------- ");

            var obj = JSON.parse(jsonarry);

            myLogger("jsonarry.length == " + jsonarry.length);

            for (var key in jsonarry) {
              if (jsonarry.hasOwnProperty(key)) {
                myLogger(jsonarry[key].entryID + " - " + jsonarry[key].distance + " - " + jsonarry[key].calories);
              }
            }

            /*
            for (var key in jsonarry) {
              if (jsonarry.hasOwnProperty(key)) {
                myLogger(jsonarry[0].entryID + " - " + jsonarry[1].distance + " - " + jsonarry[2].calories);
              }
            }
            */
          } else {
            myLogger("myLogger - req.status == " + req.status);
          }

          //return req.status === 200 ? success(req.responseText) : error(req.status)
      } else {
          myLogger("myLogger - req.readyState != 4 i.e. req.readyState === " + req.readyState);
      }
  }

  req.open("GET", 'http://www.dummyurl/dbread.php', true);

  req.send(null); 
}

function myLogger(content) {
    if (window.console && window.console.log) {
        console.log("myLogger - " + content);
    }
}

您正在解析JSON字符串,而不是遍历解析的值,而是遍历JSON strring。

var obj = JSON.parse(jsonarry);

myLogger("jsonarry.length == " + jsonarry.length);

for (var key in jsonarry) {
    if (jsonarry.hasOwnProperty(key)) {
        myLogger(jsonarry[key].entryID + " - " + jsonarry[key].distance + " - " + jsonarry[key].calories);
    }
}

如下使用。

var obj = JSON.parse(jsonarry);

myLogger("jsonarry.length == " + jsonarry.length);

for (var key in obj) {
    if (jsonarry.hasOwnProperty(key)) {
        myLogger(jsonarry[key].entryID + " - " + jsonarry[key].distance + " - " + jsonarry[key].calories);
    }
}

但是,为什么要遍历对象? 您需要遍历该对象内部的数组,对吗?

您需要处理分配给obj的已解析JSON结果,而不是jsonarry中的原始JSON文本。

另外, "dummmysetsJSONArr"是对象数组。

尝试这个:

for (var key in obj) {
      if (obj.hasOwnProperty(key)) {
           var list=obj[key];
           list.forEach(function(item){
               myLogger(item.entryID + " - " + item.distance + " - " + item.calories);
           });
      }
 }

也要避免从变量名(例如jsonarry删除字母,这最终会导致混乱。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM