【发布时间】:2021-02-19 15:20:30
【问题描述】:
有一个 JSON 对象,我需要将其映射到对象数组,但经过多次尝试后无法立即获得结构。如果脚本变得非常复杂并且损害可读性和易于维护,那么将这个过程分成多个脚本而不是一个 dataweave 2 脚本会更好吗?
当前输出:
{
"batchId": "71f7a8534907940cb1b5",
"status": "1",
"products": [
{
"materialNumber": "9780429435942",
"errorMessages": [
"Failure",
"Mistake"
],
"materialNumber": "9780429435950",
"errorMessages": [
"Exception"
]
}
]
}
期望的输出:
{
"batchId": "71f7a8534907940cb1b5",
"status": "1",
"products": [
{
"materialNumber": "9780429435942",
"errorMessages": [
"Failure",
"Mistake"
]
},
{
"materialNumber": "9780429435950",
"errorMessages": [
"Exception"
]
}
]
}
DW2 脚本:
%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
}
]
}
来源数据:
<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>
【问题讨论】:
-
我缺少一些值来自己尝试(例如变量),但如果您将
errorMessages: value.messages.*item.*msgText更改为[errorMessages: value.messages.*item.*msgText[0]],您也许可以获得所需的结果。