Mule Dataweave 1.0将项目添加到阵列
我的有效载荷示例如下所示:Mule Dataweave 1.0将项目添加到阵列,mule,mule-studio,mule-component,dataweave,anypoint-studio,Mule,Mule Studio,Mule Component,Dataweave,Anypoint Studio,我的有效载荷示例如下所示: { "ID": "72a6dcc0", "SourceCode": "ABC", "TargetCode": "DEF", . . . . . "Products": [ { "ProdId": "410ef294", "ProdDetails": { "ProdIdentifier": "410ef294-e80b", "DateFrom": "2019-01-01T
{
"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"
}
}
]
}
我需要在“Products”数组中添加一个名为“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"
}
}
]
}
我给出的负载只是一个示例,它有数百个属性。我只需要向“Products”数组添加一个新属性,并在主有效负载中保留其他项。是否可以使用“mapobject”完成一个完整的负载“map”并在内部向数组添加一个新属性?我使用的是dataweave 1.0最简单的方法是使用“-”操作符删除“Product”条目,然后使用“+”添加新的“Product”条目,以将新元素附加到数组中,使用“+”操作符 所以我做的是一个helper函数,它表示更新字段值的意图。这个函数有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"})))
}
)
)
谢谢你的回答。如果我要在第一个产品本身下添加一个新属性,这会起作用吗?我想你已经给出了一个例子来添加一个新产品本身。我正在尝试这样的东西:有效载荷-“产品”++({Products:payload.Products+({ProdDescription:“这是一个示例”)}),但是没有得到所需的输出。我已经更新了一个新的代码片段,它符合你的要求。非常感谢你。使用您以前的方法,我能够使用mapobject:payload-“Products”++(Products:payload.Products mapobject{($$):$}++{“ProdDescription”:“this is a Sample”})实现这一点