Dataweave 从输入负载到输出的转换

问题描述 投票:0回答:1

需要 DW 帮助: 下面是输入。对象之间存在父子关系。 “关键”列指定了这一点。 例如。 109-200C-001 是 109-200C 的孩子。将有 n 个具有不同字符串的对象。

[
    {
        "Class": 1,
        "Amount": 2,
        "Key": "109-200C-001"
    },
    {
        "Class": 3,
        "Amount": 4,
        "Key": "109-200C"
    },
    {
        "Class": 8,
        "Amount": 7,
        "Key": "xyz-123-007"
    },
    {
        "Class": 8,
        "Amount": 4,
        "Key": "xyz-123"
    },
]

需要如下输出:只有添加了 Amount of Child 和 Parent 的父对象。

[
    
    {
        "Class": 3,
        "Amount": 6,
        "Key": "109-200C"
    },
    {
        "Class": 8,
        "Amount": 11,
        "Key": "xyz-123"
    }
]
dataweave mulesoft anypoint-studio mule4
1个回答
0
投票

我首先删除子对象,然后对于每个父对象,我将以相同键开头的所有元素的值相加。将部分逻辑封装在函数中使脚本在意图上非常明确。

%dw 2.0
output application/json
import * from dw::core::Arrays
fun isParent(a, x)=a some ( !($.Key == x.Key) and ($.Key startsWith x.Key))
fun sumChilds(a, x)=a filter  ($.Key startsWith x.Key) sumBy $.Amount
---
payload 
    filter isParent(payload, $)
    map {
        Class: $.Class,
        Ammount: sumChilds(payload, $),
        Key: $.Key
    }

输出:

[
  {
    "Class": 3,
    "Ammount": 6,
    "Key": "109-200C"
  },
  {
    "Class": 8,
    "Ammount": 11,
    "Key": "xyz-123"
  }
]

我本可以使用

update
运算符而不是
map()

© www.soinside.com 2019 - 2024. All rights reserved.