Javascript-使用for循环运行JSON对象 [英] Javascript - Running through JSON object using for loop

查看:107
本文介绍了Javascript-使用for循环运行JSON对象的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I'm new to JS and I'm trying to loop through the following 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}

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

but my console line keep printing:

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

myLogger - undefined - undefined - undefined

我看到了成功的解决方案,例如这些似乎不适用于我.

I've seen successful solutions such as these which seem not be working for me.

我的for循环尝试如下:

My for loop attempts are as below:

    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字符串.

You are parsing the JSON string and instead of looping through the parsed value, you are looping through 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);
    }
}

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

But, why are you looping through object ? You need to loop through array inside that object right ?

这篇关于Javascript-使用for循环运行JSON对象的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆