0
votes

Reformat JSON existant en Nouveau JSON en utilisant JavaScript / Typescript

J'ai actuellement un JSON existant que je souhaite changer / reformater en un nouveau JSON pour pouvoir être utilisé dans un service externe. Le format est un peu compliqué mais je ne peux pas le changer, je dois donc modifier mon Json existant. correspondre à ma sortie souhaitée.

JSON existant: xxx

sortie souhaitée: xxx

J'ai essayé d'itération du JSON existant à l'aide de boucles, mais je ne sais pas vraiment comment formater mes boucles pour utiliser les valeurs comme les clés? Je suppose que je devrais devoir utiliser objet.Keys ou objet.values, mais je ne sais pas comment obtenir une valeur spécifique pour une clé spécifique.

Exemple format: xxx


2 commentaires

Vous le recevez donc toujours dans le même format d'entrée et souhaitez-le le transformer au même format de sortie?


La première option est imo une meilleure structure. La raison pour laquelle? À moins que vous sachiez que les "spécificateurs" contiennent des propriétés "ID de marque" et "ID de programme" à l'avance (similaires à la manière dont vous savez que "Document" contient des méthodes "QuerySelector" et "GetElementById"), vous devrez faire boucler l'objet Propriétés, auquel cas vous pourriez aussi bien avoir utilisé un tableau. Pas de comptabilisation des exigences des API, cependant.


3 Réponses :



3
votes

function tranform({specifiers}) {
  return { specifiers: specifiers.reduce((obj, {label, type, value}) => ({...obj, [label]: { [type]: { type, value } } }), {}) }
}

const json = {
    "specifiers": [{
        "value": "test",
        "type": "text",
        "label": "Brand ID"
    }, {
        "value": "test",
        "type": "text",
        "label": "Program ID"
    }]
}

console.log(tranform(json))


3 commentaires

Pourquoi pas carte au lieu de réduire?


@Brunoely map transformez les enfants de la matrice et renvoie un nouveau tableau (avec des enfants transformés), mais op a besoin d'un objet au lieu d'un tableau


Vous avez raison, pour une seconde, je pensais spécificateurs était un tableau dans la sortie



0
votes

Vous pouvez utiliser # Array.Reduce. Snippet ci-dessous.

p>

let input = {
  "specifiers": [{
    "value": "test",
    "type": "text",
    "label": "Brand ID"
  }, {
    "value": "test",
    "type": "text",
    "label": "Program ID"
  }]
}
const res = input.specifiers.reduce((res, obj) => {
  const {
    label,
    type,
    value
  } = obj
  res[label] = {};
  res[label][type] = {
    value,
    type
  };
  return res;
}, {});
console.log(res);


0 commentaires