JSON-respons restructureren in Angular 2+
Ik ontvang momenteel een web API JSON-respons die sterk genest is en ik wil deze herstructureren door alleen de gegevens die ik nodig heb eruit te halen en eenvoudiger te maken.
Hoe zou ik dit doen in Angular 2+/Typescript?
Elke hulp zou echt gewaardeerd worden.
Zeg dat ik zoiets heb:
"O1": {
"P1": "Something",
"A1": [{
"P2": "Something",
"A2": [{
"P3": "Something"
}]
}]
"P4": "Something"
}
en ik wil het herstructureren naar dit:
"O1": {
"P1": "Something",
"P2": "Something",
"P3": "Something"
}
Kan ik het model in een klasse in de constructor herbouwen? Zo ja, ik ben tot nu toe nog niets online tegengekomen.
Laat me weten of ik nog meer informatie moet geven.
Bedankt
Antwoord #1
Laten we het initiële object vlak maken met de snippet die werd voorgesteld. En vervolgens kunnen we die eigenschappen filteren die we in het uiteindelijke object moeten opnemen:
function filterObj(obj: any, propsForFilter: string[]) {
const result = {};
for (let prop in obj) {
const filteredProp = propsForFilter.find(p => prop.includes(p));
if (filteredProp) {
result[filteredProp] = obj[prop];
}
}
return result;
}
const flattened = flattenObject(obj);
console.log(flattened, filterObj(flattened, ['P1', 'P2']));
Deze methode filterObj accepteert de array van eigenschappen om ze op te nemen in het uiteindelijke resultaat. Hopelijk zal dit nuttig voor je zijn.
Antwoord #2
Ik vond dit stukje op GitHub: https://gist.github.com/penguinboy/762197
var flattenObject = function(ob) {
var toReturn = {};
for (var i in ob) {
if (!ob.hasOwnProperty(i)) continue;
if ((typeof ob[i]) == 'object') {
var flatObject = flattenObject(ob[i]);
for (var x in flatObject) {
if (!flatObject.hasOwnProperty(x)) continue;
toReturn[i + '.' + x] = flatObject[x];
}
} else {
toReturn[i] = ob[i];
}
}
return toReturn;
}
