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.