【问题标题】:Dataweave 2.0 reduce function to reduce the array of json MuleDataweave 2.0 reduce函数减少json Mule的数组
【发布时间】:2021-03-26 16:39:23
【问题描述】:

我的输入 Json 如下所示:-

[{
        "eId": "123",
        "eType": "NZ",
        "value": [{
                "tId": "444"
            }, {
                "tId": "555"
            }
        ]
    }, {
        "eId": "456",
        "eType": "AU",
        "value": [{
                "tId": "666"
            }
        ]
    }
]

预期的输出 Json 是这样的:

 [{
        "eId": "123",
        "eType": "NZ",
        "tId": "444"
    }, {
        "eId": "123",
        "eType": "NZ",
        "tId": "555"
    }, {
        "eId": "456",
        "eType": "AU",
        "tId": "666"
    }
]

我尝试使用下面的 reduce 函数进行转换。我没有得到预期的回应

%dw 2.0
output application/json
---
payload reduce ((val, acc = []) -> 
acc + {
    "id" : val.eId, "type": val.eType, "Tid": val.value map $.tId
})

谁能纠正我哪里做错了

【问题讨论】:

  • 示例输出没有用。您需要举例说明主数组中的多个元素应该发生什么,并将类型添加到示例输出中。

标签: mule dataweave mule4


【解决方案1】:

我会做出有根据的猜测,因为示例预期输出不完整,预期输出应该如下所示:

[
  {
    "eId": "123",
    "type": "Co",
    "tId": "444"
  },
  {
    "eId": "123",
    "type": "Co",
    "tId": "555"
  }
]

脚本:

%dw 2.0
output application/json
fun mapItem(i) = i.value map { eId: i.eId, "type": i.eType, tId: $.tId }
---
payload flatMap mapItem($)

如果需要,请随时编辑问题以添加更多详细信息。

【讨论】:

    【解决方案2】:

    您可以尝试使用以下 dataweave 表达式:

    %dw 2.0
    output application/json
    ---
    flatten(payload map (it1, ix1) -> 
        it1.value map (it2, ix2) -> {
            eId: it1.eId,
            eType: it1.eType,
            tId: it2.tId
        })
    

    【讨论】:

    • 这是创建数组数组作为响应。(不生成预期响应)
    • 你是对的。对此感到抱歉。我刚刚更新了 DW 表达式来解决它。
    【解决方案3】:

    试试这个。

    %dw 2.0
    output application/json
    var inp = payload
    ---
    payload[0].value map {
        eId: inp[0].eId,
        Tid: $.tId
    }
    

    【讨论】:

    • 它不适用于所有请求。如果给定数组中有多个对象
    • 那个解决方案纯粹是基于问.. 这是更新的一个
    【解决方案4】:

    更新的解决方案

    %dw 2.0
    output application/json
    
    ---
    payload flatMap ((item, index) ->  { 
         a: item.value map {
             eId:item.eId,
             eType: item.eType,
             tId: $.tId
         }}.a)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-09
      • 2017-09-15
      • 1970-01-01
      • 2021-12-02
      • 2017-05-20
      • 1970-01-01
      相关资源
      最近更新 更多