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.
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. P> Exemple format: fort> p>
3 Réponses :
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))
Pourquoi pas carte code> 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 code> était un tableau dans la sortie
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);
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.