遍历3D JSON数组

时间:2019-08-24 20:40:49

标签: javascript

我正在尝试编写一个脚本,该脚本通过AJAX请求返回的JSON数组进行迭代。我希望它遍历每个键(字符串)和值(布尔值),然后将一个CSS类添加到ID与键名称匹配的对象中。

由于数组是3D,因此实际值落在“框”子数组下。

我成功地从服务器取回了JSON,尝试并对其进行迭代时会出现问题;我可以获取“过期”变量的值,但不能获取其他任何值。

来自服务器的JSON:

{
    "expired": false,
    "boxes": {
        "read_curriculum__c": false,
        "update_salesforce__c": false,
        "slack_add__c": true,
        "orientation__c": false,
        "survey__c": true
    }
}

在页面上:

var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function() {
  if (xmlhttp.readyState == XMLHttpRequest.DONE) {  
    if (xmlhttp.status == 200) {
      console.log(xmlhttp.responseText);
      var responseObj = JSON.parse(xmlhttp.responseText);
      if(responseObj.expired == false)
      {
        for(var i = 0; i < responseObj.boxes.length; i++) // Take however many items are in the boxes array.
        {
          if(responseObj.boxes[i] == true) //Go through each one and check if it's true
          {
            var element = getElementById(responseObj.boxes[i]); //Select the element on the page with the same ID
            element.classList.add("true"); //Add the class 'true'
        }
      }
    }
  }
};
xmlhttp.open("GET", "/onboard/onboard.php?function=fetch", true);
xmlhttp.send();

我尝试过的所有变体都会给我“未定义”或“对象”。我也在努力找出如何将键与值分开的方法。任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:1)

这不是一个数组,它只是一个对象,其中嵌套了另一个对象。您可以使用for (var i in object)遍历对象的键。

  if(!responseObj.expired)
  {
    for(var i in responseObj.boxes)
    {
      if(responseObj.boxes[i]) //Go through each one and check if it's true
      {
        var element = getElementById(i); //Select the element on the page with the same ID
        element.classList.add("true"); //Add the class 'true'
    }
  }