En utilisant Dataweave, j'essaye de transformer ceci:
[ { "name":"ConcurrentAsyncGetReportInstances", "max":200, "remaining":200 }, { "name":"ConcurrentSyncReportRuns", "max":"20", "remaining":"20" }, { "name":"DailyAnalyticsDataflowJobExecutions", "max":50, "remaining":50 }, { "name":"DailyApiRequests", "max":6175000, "remaining":6174972 }, { "name":"DailyAsyncApexExecutions", "max":325000, "remaining":324902 } ]
En ceci:
{ "ConcurrentAsyncGetReportInstances": { "Max": 200, "Remaining": 200 }, "ConcurrentSyncReportRuns": { "Max": 20, "Remaining": 20 }, "DailyAnalyticsDataflowJobExecutions": { "Max": 50, "Remaining": 50 }, "DailyApiRequests": { "Max": 6175000, "Remaining": 6174972, "Ant Migration Tool": { "Max": 0, "Remaining": 0 }, "CLM_service_api": { "Max": 0, "Remaining": 0 }, "CRM_service_api": { "Max": 0, "Remaining": 0 } }, "DailyAsyncApexExecutions": { "Max": 325000, "Remaining": 324902 }
Aussi - notez que je ne veux pas toutes les valeurs imbriquées comme dans DailyApiRequests
J'ai essayé la fonction de carte mais je ne sais pas comment l'utiliser correctement. Tous les exemples que j'ai vus ne semblent pas montrer ce scénario.
3 Réponses :
Si vous êtes en JavaScript , vous pouvez utiliser le package lodash
et utiliser sa fonction map
:
const _ = require('lodash') const obj = ... // your object above const res = _.map(obj, (v, k) => ({ name: k, max: v.Max, remaining: v.Remaining })) console.log(res)
Consultez la documentation de lodash
ici
L'autre chose que vous pouvez faire est de parcourir les propriétés de l'objet à la main et faites la carte par vous-même, mais je pense que vous finirez par réinventer la roue et faire exactement ce que fait lodash
;) alors, donnez-lui un essayer. Au fait, ce paquet est incroyable, il est extrêmement utile .
Similaire à Josué, mais sans introduire de dépendances inutiles.
var obj = {}; // your object above var res = []; // New object for(var key in obj) { if (!obj.hasOwnProperty(key)) continue; res.push({ name: k, max: obj[k].Max, remaining: obj[k].Remaining }); }
Un autre exemple, mais avec une boucle simple:
const obj = {}; // your object above const res = []; // New object for(const [k, v] of Object.entries(obj)) { res.push({ ...v, name: k }); }
Un exemple qui fonctionnera dans un navigateur vieux de 10 ans:
const obj = {} // your object above const res = Object.entries(obj).map( [k, v] => ({ name: k, ...v }))
Utilisation de DataWeave
%dw 1.0 %input payload application/json %output application/json --- payload pluck ((value,key) -> { name: key, max: value.Max, remaining: value.Remaining } )
Merci! Marche parfaitement.