Javascript JS-将JSON的嵌套数组转换为单个对象

Javascript JS-将JSON的嵌套数组转换为单个对象,javascript,json,Javascript,Json,我想将嵌套的JSON结构转换为单个对象,使用下面代码中使用的动态键,但它只适用于一个级别,我需要编写一些递归函数,我正在努力为n个级别的嵌套JSON编写代码。请告知 data.map((e) => { for (let key in e) { if (typeof e[key] === "object") { for (let onLevel in e[key]) { e[key + "." +

我想将嵌套的JSON结构转换为单个对象,使用下面代码中使用的动态键,但它只适用于一个级别,我需要编写一些递归函数,我正在努力为n个级别的嵌套JSON编写代码。请告知

   data.map((e) => {
   for (let key in e) {
     if (typeof e[key] === "object") {
       for (let onLevel in e[key]) {
         e[key + "." + onLevel] = e[key][onLevel];
       }
     }
   }
 });
示例

输入JSON

[{
  "Id": "0hb3L00000000jkQAA",
  "Name": "P-2797",
  "ContactEncounterId": "0ha3L000000001qQAA",
  "StartTime": "2020-06-27T11:00:00.000Z",
  "EncounterDuration": 25,
  "ContactEncounter": {
    "Name": "Grocery Shopping 17",
    "LocationId": "1313L0000004ENlQAM",
    "Id": "0ha3L000000001qQAA",
    "Location": {
      "Name": "Waitrose",
      "LocationType": "Site",
      "Id": "1313L0000004ENlQAM"
    }
  }
}]
[{
  "Id": "0hb3L00000000jkQAA",
  "Name": "P-2797",
  "ContactEncounterId": "0ha3L000000001qQAA",
  "StartTime": "2020-06-27T11:00:00.000Z",
  "EncounterDuration": 25,
  "ContactEncounter.Name": "Grocery Shopping 17",
  "ContactEncounter.LocationId": "1313L0000004ENlQAM",
  "ContactEncounter.Id": "0ha3L000000001qQAA",
  "ContactEncounter.Location.Name": "Waitrose",
  "ContactEncounter.Location.LocationType": "Site",
  "ContactEncounter.Location.Id": "1313L0000004ENlQAM"
}]
输出JSON

[{
  "Id": "0hb3L00000000jkQAA",
  "Name": "P-2797",
  "ContactEncounterId": "0ha3L000000001qQAA",
  "StartTime": "2020-06-27T11:00:00.000Z",
  "EncounterDuration": 25,
  "ContactEncounter": {
    "Name": "Grocery Shopping 17",
    "LocationId": "1313L0000004ENlQAM",
    "Id": "0ha3L000000001qQAA",
    "Location": {
      "Name": "Waitrose",
      "LocationType": "Site",
      "Id": "1313L0000004ENlQAM"
    }
  }
}]
[{
  "Id": "0hb3L00000000jkQAA",
  "Name": "P-2797",
  "ContactEncounterId": "0ha3L000000001qQAA",
  "StartTime": "2020-06-27T11:00:00.000Z",
  "EncounterDuration": 25,
  "ContactEncounter.Name": "Grocery Shopping 17",
  "ContactEncounter.LocationId": "1313L0000004ENlQAM",
  "ContactEncounter.Id": "0ha3L000000001qQAA",
  "ContactEncounter.Location.Name": "Waitrose",
  "ContactEncounter.Location.LocationType": "Site",
  "ContactEncounter.Location.Id": "1313L0000004ENlQAM"
}]

正如您所说,您需要创建一个递归来深入对象。也就是说,你必须跟踪你所在的路径

你可以用下面的方法解决它

const输入=[{
“Id”:“0hb3L00000000jkQAA”,
“名称”:“P-2797”,
“ContactEncounterId”:“0HA3L000000001QQQAA”,
“开始时间”:“2020-06-27T11:00:00.000Z”,
“遭遇”:25,
“接触接触”:{
“名称”:“杂货店购物17”,
“位置ID”:“1313L0000004ENlQAM”,
“Id”:“0HA3L000000001QQQAA”,
“地点”:{
“姓名”:“Waitrose”,
“地点类型”:“地点”,
“Id”:“1313L0000004ENlQAM”
}
}
}
];
函数合并(源,目标={},…父){
for(让Object.entries的[key,value](源)){
常量路径=(父项| |[]).concat(键);
如果(值的类型==='object'){
合并(值、目标、路径);
继续;
}
目标[path.join('.')]=value;
}
回报目标;
}

console.log(合并(输入[0])这里是另一种方法,在查找第n级对象时使用第二个参数并传递键

const obj={
“Id”:“0hb3L00000000jkQAA”,
“名称”:“P-2797”,
“ContactEncounterId”:“0HA3L000000001QQQAA”,
“开始时间”:“2020-06-27T11:00:00.000Z”,
“遭遇”:25,
“接触接触”:{
“名称”:“杂货店购物17”,
“位置ID”:“1313L0000004ENlQAM”,
“Id”:“0HA3L000000001QQQAA”,
“地点”:{
“姓名”:“Waitrose”,
“地点类型”:“地点”,
“Id”:“1313L0000004ENlQAM”
}
}
}
函数展平obj(obj,参数){
设newObj={};
用于(输入obj){
如果(对象的类型[键]=“对象”){
newObj={……newObj,
…展平obj(obj[key],key+'。)
}
}否则{
newObj[param+key]=obj[key]
}
}
返回newObj;
}
log(flattobj(obj,,)
那不是。输入和输出都是带有一个对象的数组->