从具有多个父子关系的Nested Json中获取特定数据

Getting Specific data from Nested Json which is having multiple Parent Children

本文关键字:Json 获取 数据 Nested 父子关系      更新时间:2023-09-26

Am正试图从具有多个父子关系的嵌套JSON中筛选出一些特定数据。这是我的json,

[{
  "id": "111111",
  "name": "Parent",
  "steps": [{
    "id": "22222",
    "name": "Child",
    "steps": [{
      "id": "333333",
      "name": "Child -Child",
      "steps": [{
        "id": "444444",
        "name": "Child - Child - Child",
        "steps": [{
          "id": "5555",
          "name": "Child - Child - Child - Child"
        }, {
          "id": "522e9327-0747-4080-b6e2-d57e726b5b26",
          "name": "Child - Child - Child - Child 2"
        }],
      }],
    }],
  }],
}]

这里要做的是,我必须获取一些特定的数据,这些数据位于这个嵌套的json中。例如:我需要像["parent","Child","Child-Child"...etc ]那样的输出。所以我使用java脚本使用了map函数,但输出与["ParentChildChildChild"](没有空格)不同。如果输出是String only mean的,我可以放"''n"并将它们分开,但有时它们是数字,所以会出现问题。这是我试过的代码,

var myReturnedValues = mainSteps.map(x => [
  x.steps.map(y => y.name + 
    y.steps.map(z => z.name + 
      z.steps.map(a => a.name + a.steps.map(b => b.name))
    )
  )
]);

有人能帮我澄清一下吗。

要想最有效地实现这一点,你需要最有效地做到这一点。

使用此模式意味着无论您有多少级别的嵌套对象,数组都将始终被填充。试试这个:

var data = [{
  "id": "111111",
  "name": "Parent",
  "steps": [{
    "id": "22222",
    "name": "Child",
    "steps": [{
      "id": "333333",
      "name": "Child -Child",
      "steps": [{
        "id": "444444",
        "name": "Child - Child - Child",
        "steps": [{
          "id": "5555",
          "name": "Child - Child - Child - Child"
        }, {
          "id": "522e9327-0747-4080-b6e2-d57e726b5b26",
          "name": "Child - Child - Child - Child 2"
        }],
      }],
    }],
  }],
}]
var names = [];
function getNames(arr) {
    for (var i = 0; i < arr.length; i++) {
        names.push(arr[i].name);
        if (arr[i].steps && arr[i].steps.length)
            getNames(arr[i].steps);
    }
}
getNames(data);
console.log(names);

您可以使用javascript映射函数&递归

var jsonArray = [{
  "id": "111111",
  "name": "Parent",
  "steps": [{
    "id": "22222",
    "name": "Child",
    "steps": [{
      "id": "333333",
      "name": "Child -Child",
      "steps": [{
        "id": "444444",
        "name": "Child - Child - Child",
        "steps": [{
          "id": "5555",
          "name": "Child - Child - Child - Child"
        }, {
          "id": "522e9327-0747-4080-b6e2-d57e726b5b26",
          "name": "Child - Child - Child - Child 2"
        }],
      }],
    }],
  }],
}]
var namesArray = [];
var recur = function(obj) {
  namesArray.push(obj.name);
  if(obj.steps) {
    obj.steps.map(recur);
  }
}
jsonArray.map(recur);
console.log(namesArray);

您也可以尝试

function getObjectKeyValues(obj, objKey) { 
    var result = []; 
    JSON.stringify(obj, function(key, value) { 
        if (key === objKey) { 
            result.push(value) 
        }
        return;
    }); 
    return result;
}

检查:

MDN JSON.stringify()