如何在dataweave中转换子项

问题描述

我有以下输入

{
  "error1": [
    {
      "store": "1201","DocumentNumber": "FF15974433790786634518"
    },{
      "store": "1201","DocumentNumber": "FF15974433790786634519"
    },"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"
    },"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"
      ]
    },"DocumentNumber": [
        "FF15974433790786634520"
      ]
    }
  ],"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
    })
})