我想将嵌套的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"
}
}
}]
OutPut JSON
[{
"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"
}]
答案 0 :(得分:2)
正如您所说,您需要创建一个递归以更深入地了解对象。也就是说,您必须跟踪自己所在的路径。
您可以通过以下方式解决
InvalidRegionError: Provided region_name 'region: us-east-1' doesn't match a supported format.
或者通过以下方式,您只需使用const input = [{
"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"
}
}
}
];
function merge( source, target = {}, ...parents) {
for (let [key, value] of Object.entries( source ) ) {
const path = (parents || []).concat( key );
if (typeof value === 'object') {
merge( value, target, ...path );
continue;
}
target[path.join('.')] = value;
}
return target;
}
console.log( merge( input[0] ) );
将更深入的搜索结果分配给当前对象。
Object.assign
答案 1 :(得分:-1)
这是另一种方法,通过使用第二个参数并在找到第n级对象时传递键。
const obj = {
"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"
}
}
}
function flattenObj(obj, param) {
let newObj = {};
for (let key in obj) {
if (typeof obj[key] === 'object') {
newObj = { ...newObj,
...flattenObj(obj[key], key + '.')
}
} else {
newObj[param + key] = obj[key]
}
}
return newObj;
}
console.log(flattenObj(obj, ''))