【问题标题】:How to map certain keys of an array to make another one in mule 4如何映射数组的某些键以在 mule 4 中创建另一个键
【发布时间】:2021-04-08 22:44:12
【问题描述】:

我有一个数组 -

[
    {
        "Number": "12345",
        "abc": {
            "group": "abc",
            "operation": "Create"
        },
        "def": {
            "group": "def",
            "operation": "Create"
        }
    },
    {
        "Number": "45678",
        "xyz": {
            "group": "xyz",
            "operation": "Update"
        },
        "sdf": {
            "group": "sfd",
            "operation": "Delete"
        }
    }
]

需要转换成这种形式-

[
    {
        "Number": "12345",
        "group": "abc",
        "operation": "Create"
    },
    {
        "Number": "12345",
        "group": "def",
        "operation": "Create"
    },
    {
        "Number": "45678",
        "group": "xyz",
        "operation": "Update"
    },
    {
        "Number": "45678",
        "group": "sfd",
        "operation": "Delete"
    }
]

尝试为此编写 dataweave 表达式。问题是 abc、def、xyz 和所有这些都是对象,它们可能会出现也可能不会出现,并且可能具有不同的值。

【问题讨论】:

    标签: mule dataweave mule4


    【解决方案1】:

    另一种处理方式:

    %dw 2.0
    output application/json
    ---
    payload flatMap ((item, index) -> 
        (item - "Number") pluck {
            "Number": item.Number,
            ($)
        }
    )
    

    方法大致相同,但解释如下:我们使用map 进行迭代,但使用flatMap 代替,因为我们知道我们将从每个实例返回多个项目。然后我们要做的第一件事是从项目中删除键Number,因为我们只想为每个不是Number 的键构建一个新对象。然后我们可以pluck,这让我们可以访问每个键和值;从这里我们使用item 的数值构建一个新对象,并将我们提取的整个对象展开到该对象中。当使用这样的匿名函数时,$$$$$$ 等代表函数参数 - 在pluck 的情况下,值、键、索引。我们放在$ 周围的括号意味着将整个对象扩展为我们的对象;在 javascript 中,这类似于{ ...props, anotherKey: 'value' }。这意味着我们实际上不需要知道或关心该对象的结构,如果我们有一个潜在的灵活模式,这很有用。

    【讨论】:

      【解决方案2】:

      你需要对每个元素进行映射,然后对每个对象进行过滤以消除属性 Number,并使用 pluck 将每个剩余的键转换为一个数组。我使用 flatMap 将每个 pluck 的每个结果数组连接到响应中。

      %dw 2.0
      output application/json
      ---
      payload flatMap ((item, index) -> 
          item 
             filterObject ((value, key, index) -> !(key ~= "Number")) 
             pluck ((value, key, index) -> {Number: item.Number, group: value.group, operation: value.operation})
      )
      

      【讨论】:

      • 嗨,Aled,感谢一个小小的改变,如果我有另一个键怎么办 - [ { "Number": "12345", "member": { "abc": { "group": "abc", "operation": "Create" }, "def": { "group": "def", "operation": "Create" } } }, { "Number": "45678", "member": {“xyz”:{“组”:“xyz”,“操作”:“更新”},“sdf”:{“组”:“sfd”,“操作”:“删除”}}}]
      • 并且需要相同的输出,我应该改变什么?
      • %dw 2.0 output application/json --- payload flatMap ((item, index) -> (item filterObject ((value, key, index) -> !(key ~= "Number") ) ).member pluck ((value, key, index) -> {Number: item.Number, group: value.group, operation: value.operation}) )
      猜你喜欢
      • 2022-12-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多