首页 > 解决方案 > Javascript - 遍历 Json 对象并获取每个项目的层次键,包括嵌套对象和数组

问题描述

我想获取任何 JSON 对象的值和键,包括这些作为通用方法,即使是复杂对象也可以使用

json

{
  "timezone": 5.5,
  "schedule": {
    "type": "daily",
    "options": {
      "hour": 10,
      "minute": 29
    }
  }

想要分层架构中的值和键就像这些

timezone - 5.5
schedule.type - daily
schedule.type.options.hour - 10
schedule.type.options.minute - 29

另外,我使用这个函数可以获取 JSON 对象的所有对象键和值,即使在嵌套数组和对象中也是如此

function iterate(obj) {
  for (var property in obj) {
      if (obj.hasOwnProperty(property)) {
          if (typeof obj[property] == "object") {
              iterate(obj[property]);
          } else {
            console.log(property , obj[property])
          }
      }
  }
  return obj;
}

PS - 我也想将它用于数组

"dirs": [ { "watchDir": "Desktop/logs", "compressAfterDays": 50 }, { "watchDir": "Desktop/alerts", "timeMatchRegex": "(.*)(\\d{4})-(\\d{2})-(\\d{2})-(\\d{2})_(\\d{2})(.*)", }]

我想要的输出就是这样

dirs[0].watchdir="Desktop/alerts"
dirs[1].watchDir="Desktop/logs"

标签: javascriptarraysnode.jsjsonajax

解决方案


在递归调用中传递键:

 function iterate(obj, path = []) {
   for (let property in obj) {
     if (obj.hasOwnProperty(property)) {
       if (typeof obj[property] == "object") {
          iterate(obj[property], [...path, property]);
       } else {
         console.log(path, property , obj[property])
       }
     }
   }  
 }

推荐阅读