我的有效负载示例如下:
{
"ID": "72a6dcc0",
"SourceCode": "ABC",
"TargetCode": "DEF",
.
.
.
.
.
"Products": [
{
"ProdId": "410ef294",
"ProdDetails": {
"ProdIdentifier": "410ef294-e80b",
"DateFrom": "2019-01-01T00:00:00Z",
"DateTo": "9999-12-31T00:00:00Z",
"ProductName": "ProdA"
}
}
]
}
我需要在“产品”数组中添加一个名为“ ProdDescription”的新属性,以便我的输出看起来像这样:
{
"ID": "72a6dcc0",
"SourceCode": "ABC",
"TargetCode": "DEF",
.
.
.
.
.
"Products": [
{
"ProdId": "410ef294",
"ProdDetails": {
"ProdIdentifier": "410ef294-e80b",
"DateFrom": "2019-01-01T00:00:00Z",
"DateTo": "9999-12-31T00:00:00Z",
"ProductName": "ProdA",
"ProdDescription": "This is a Sample"
}
}
]
}
我提供的有效负载只是一个示例,它具有数百个属性。我只需要向“产品”数组添加新属性,并将其他项保留在主有效负载中即可。是否可以做一个完整的有效负载“ map”,并在内部使用“ mapobject”向数组添加新属性?我正在使用dataweave 1.0
最简单的方法是使用“-”运算符删除“ Product”条目,然后使用“ ++”添加新的“ Product”条目以使用“ +”运算符将新元素追加到数组中
所以我所做的是一个帮助函数,该函数表达了更新字段值的意图。该函数有3个参数,第一个是要更新的对象,第二个是字段名,第三个是将提供新值并用旧值调用的回调。
这是我的示例代码
%dw 1.0
%input payload application/json
%output application/json
%function updateWith( value,fieldName, newValueProvider)
using(oldValue = value[fieldName]) (
(value - fieldName) ++ {(fieldName): newValueProvider(oldValue)}
)
---
updateWith(payload, "Products",
(products) -> (
{
"Products": products map ((item) ->
updateWith(item, "ProdDetails",
((ProdDetails) -> ProdDetails ++ {"ProdDescription": "This my new Product"})))
}
)
)