2 votes

Restructuration de la réponse JSON en Angular 2+

Je reçois actuellement une réponse JSON d'une API web qui est fortement imbriquée et je veux la restructurer en extrayant uniquement les données dont j'ai besoin et en la rendant plus simple.

Comment puis-je faire cela en Angular 2+/Typescript?

Une aide serait vraiment appréciée.

Disons que j'ai quelque chose comme ceci :

"O1": {
    "P1": "Quelque chose",
    "A1": [{
       "P2": "Quelque chose",
       "A2": [{
         "P3": "Quelque chose"
        }]
    }]
    "P4": "Quelque chose"
}

et je veux le restructurer comme ceci :

"O1": {
    "P1": "Quelque chose",
    "P2": "Quelque chose",
    "P3": "Quelque chose"
}

Puis-je reconstruire le modèle dans une classe dans le constructeur? Si c'est le cas, je n'ai pas encore été en mesure de trouver quelque chose en ligne.

Faites-moi savoir si je dois fournir des informations supplémentaires.

Merci

0voto

Hamid Asghari Points 1878

J'ai trouvé cet extrait sur 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;
}

0voto

shohrukh Points 1366

Applatissons l'objet initial en utilisant le snippet qui a été proposé. Et ensuite nous pourrons filtrer les propriétés que nous devons inclure dans l'objet final :

 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']));

Cette méthode filterObj accepte le tableau de propriétés à inclure dans le résultat final. J'espère que cela vous sera utile.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X