Angular 2+'de JSON Yanıtını Yeniden Yapılandırma
Şu anda oldukça iç içe geçmiş bir web API JSON yanıtı alıyorum ve sadece ihtiyacım olan verileri çıkarıp daha basit hale getirerek yeniden yapılandırmak istiyorum.
Bunu Angular 2+/Typescript'te nasıl yapardım?
Her türlü yardım gerçekten takdir edilecektir.
Diyelim ki şöyle bir şeye sahibim:
"O1": {
"P1": "Something",
"A1": [{
"P2": "Something",
"A2": [{
"P3": "Something"
}]
}]
"P4": "Something"
}
ve bunu şu şekilde yeniden yapılandırmak istiyorum :
"O1": {
"P1": "Something",
"P2": "Something",
"P3": "Something"
}
Bir sınıfta yapıcıda modeli yeniden oluşturabilir miyim? Eğer öyleyse, şu ana kadar çevrimiçi olarak hiçbir şey bulamadım.
Herhangi bir ek bilgi sağlamam gerekip gerekmediğini bana bildirin.
Teşekkürler
Cevap #1
Önerilen kod parçasını kullanarak başlangıç nesnesini düzleştirelim. Ve sonra nihai nesneye dahil etmemiz gereken özellikleri filtreleyebiliriz:
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']));
Bu filterObj yöntemi, nihai sonuca dahil etmek için özelliklerin dizisini kabul eder. Umarım bu sizin için faydalı olur.
Cevap #2
Bu parçayı github'da buldum: 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;
}
