Have a JSON Object which I need to map to an array of objects but can't get the structure right after many tries. Would it be better, if the script gets very complex and damages readability and ease of maintenance, to have this process divided into to scripts instead of a one dataweave 2 script?
Current output:
{
"batchId": "71f7a8534907940cb1b5",
"status": "1",
"products": [
{
"materialNumber": "9780429435942",
"errorMessages": [
"Failure",
"Mistake"
],
"materialNumber": "9780429435950",
"errorMessages": [
"Exception"
]
}
]
}
Desired output:
{
"batchId": "71f7a8534907940cb1b5",
"status": "1",
"products": [
{
"materialNumber": "9780429435942",
"errorMessages": [
"Failure",
"Mistake"
]
},
{
"materialNumber": "9780429435950",
"errorMessages": [
"Exception"
]
}
]
}
DW2 script:
%dw 2.0
output application/json
var failedProducts = vars.response.materials filterObject ((product) -> product.status == "1")
---
{
batchId: vars.batchId,
status: vars.overallStatus,
products: [
failedProducts mapObject (value,key,index) -> {
materialNumber: value.materialNumber,
errorMessages: value.messages.*item.*msgText
}
]
}
Source data:
<response>
<overallStatus>1</overallStatus>
<materials>
<item>
<status>0</status>
<materialNumber>9781231231231</materialNumber>
<messages>
<item>
<msgText>Success</msgText>
</item>
</messages>
</item>
<item>
<status>1</status>
<materialNumber>9780429435942</materialNumber>
<messages>
<item>
<msgText>Failure</msgText>
</item>
<item>
<msgText>Mistake</msgText>
</item>
</messages>
</item>
<item>
<status>1</status>
<materialNumber>9780429435950</materialNumber>
<messages>
<item>
<msgText>Exception</msgText>
</item>
</messages>
</item>
</materials>
</response>