Übereinstimmende Array-Werte in Maultier 4 mithilfe von Dataweave
Ich versuche, den spezifischen Wert aus der eingegebenen Nutzlast mithilfe von Dataweave abzugleichen.
Eingang:
{
"drives": [{
"id": "0AEzOyzyCb7Uk9PVA",
"name": "SFJob-2020-10"
}, {
"id": "0AMEHi1wsq-8FUk9PVA",
"name": "SFJobs-2020-11"
} ],
"nextPageToken": "~!!~AI9FV7RV4uSXy20zpCBTP2LFWCXS0c"
},
{
"drives": [{
"id": "0AEz3mOyzyCb7Uk9PVA",
"name": "Dev2020-10"
}, {
"id": "0AMEHi1wsq-8FUk9PVA",
"name": "Dev2020-11"
}],
"nextPageToken": "~!!~AI9P2LFWCXS0c"
}
Wie kann ich überprüfen, ob der Wert "Dev2020-10" vorhanden ist oder nicht?
Ich verwende den folgenden Code, der mir einen Fehler gibt.
%dw 2.0
output application/json
---
payload.drives filter ((item, index) -> item.name == 'Dev2020-10')
Erwartete Ausgabe:
[{
"id": "0AEz3mOyzyCb7Uk9PVA",
"name": "Dev2020-10"
}]
Wie kann ich das erreichen?
Antworten
Erstens ist die Eingabe ungültig. Ich gehe davon aus, dass es sich um ein JSON-Array handeln soll, also habe ich in Klammern gesetzt : [ {..},{..} ].
Danach werden Sie feststellen, dass der Filter ein einzelnes Objekt erwartet. Da es sich jedoch um ein Array handelt, müssen Sie es zuerst zuordnen. Um ein einzelnes Array zurückzugeben, habe ich eine flatMap () verwendet:
%dw 2.0
output application/json
---
payload flatMap $.drives filter ((item, index) -> item.name == 'Dev2020-10')
Ausgabe:
[
{
"id": "0AEz3mOyzyCb7Uk9PVA",
"name": "Dev2020-10"
}
]
Die Lösung kann in zwei Schritten betrachtet werden:
- Führen Sie alle Laufwerke zusammen, um ein einzelnes Array von Objekten zu erhalten
flatten(inputArray.drives) - Filtern Sie das neue Array von Objekten basierend auf den Suchkriterien
filter ((item, index) -> item.name == "Dev2020-11")
Die Lösung wird folgende sein:
%dw 2.0
output application/json
var inputArray = [
{
"drives": [{
"id": "0AEzOyzyCb7Uk9PVA",
"name": "SFJob-2020-10"
}, {
"id": "0AMEHi1wsq-8FUk9PVA",
"name": "SFJobs-2020-11"
} ],
"nextPageToken": "~!!~AI9FV7RV4uSXy20zpCBTP2LFWCXS0c"
},
{
"drives": [{
"id": "0AEz3mOyzyCb7Uk9PVA",
"name": "Dev2020-10"
}, {
"id": "0AMEHi1wsq-8FUk9PVA",
"name": "Dev2020-11"
}],
"nextPageToken": "~!!~AI9P2LFWCXS0c"
}
]
---
flatten(inputArray.drives) filter ((item, index) -> item.name == "Dev2020-11")
Weitere Informationen zur Abflachungsmethode finden Sie in der Dokumentation: mule 4 doc