如何转换数据编织中的子项目

how to transform children items in dataweave

我有以下输入

{
  "error1": [
    {
      "store": "1201",
      "DocumentNumber": "FF15974433790786634518"
    },
    {
      "store": "1201",
      "DocumentNumber": "FF15974433790786634519"
    },
    {
      "store": "1201",
      "DocumentNumber": "FF15974433790786634520"
    },
    {
      "store": "1202",
      "DocumentNumber": "FF15974433790786634520"
    }
  ],
  "error2": [
    {
      "store": "1201",
      "DocumentNumber": "FF15974433790786634518"
    }],
  error3:[]
}

我想导出以下结果

{
    "error1": [{
            "store": "1201",
            "DocumentNumber": ["FF15974433790786634518", "FF15974433790786634519", "FF15974433790786634520"]
        },
        {
            "store": "1202",
            "DocumentNumber": ["FF15974433790786634520"]
        }
    ],
    "error2": [{
        "store": "1201",
        "DocumentNumber": ["FF15974433790786634518"]
    }]
}

试试这个:

输入:

{
  "error1": [
    {
      "store": "1201",
      "DocumentNumber": "FF15974433790786634518"
    },
    {
      "store": "1201",
      "DocumentNumber": "FF15974433790786634519"
    },
    {
      "store": "1201",
      "DocumentNumber": "FF15974433790786634520"
    },
    {
      "store": "1202",
      "DocumentNumber": "FF15974433790786634520"
    }
  ],
  "error2": [
    {
      "store": "1201",
      "DocumentNumber": "FF15974433790786634518"
    }],
  "error3":[]
}

脚本:

%dw 2.0
output application/json
--- 
payload filterObject ($ !=[]) mapObject {
     ($$) : $ groupBy $.store mapObject {
            temp:{
                store: $.store[0],
                DocumentNumber: $.DocumentNumber
            
}} pluck($)
}

输出:

{
  "error1": [
    {
      "store": "1201",
      "DocumentNumber": [
        "FF15974433790786634518",
        "FF15974433790786634519",
        "FF15974433790786634520"
      ]
    },
    {
      "store": "1202",
      "DocumentNumber": [
        "FF15974433790786634520"
      ]
    }
  ],
  "error2": [
    {
      "store": "1201",
      "DocumentNumber": [
        "FF15974433790786634518"
      ]
    }
  ]
}

试试下面的脚本

%dw 2.0
output application/json
---
(payload filterObject ($ != [])) mapObject ((value, key, index) -> {
    (key): (value groupBy $.store) pluck ((iValue, iKey) -> {
        store: (iKey),
        DocumentNumber: iValue.DocumentNumber
    })
})