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”})实现这一点