Übereinstimmende Array-Werte in Maultier 4 mithilfe von Dataweave

Nov 11 2020

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

1 aled Nov 11 2020 at 12:44

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"
  }
]
1 BibekKr.Bazaz Nov 18 2020 at 09:14

Die Lösung kann in zwei Schritten betrachtet werden:

  1. Führen Sie alle Laufwerke zusammen, um ein einzelnes Array von Objekten zu erhalten flatten(inputArray.drives)
  2. 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