MuleSoft 通过来自另一个 json 数组列表的键过滤一个 json 数组

MuleSoft filter a json array by keys from another json array's list

在 MuleSoft/DataWeave 中,我有一个 json 数组,我需要按另一个 json 列表中的键值进行过滤。 这是我需要过滤的 json:

[
  {
    "order_by": "CDDASD",
    "product_no": "69843270432",
    "serial_number": "CD909837296",
    "place_of_origin": "SFG",
    "depot": "LK955",
    "quantity": "150"
  },
  {
    "order_by": "CDDPOI",
    "product_no": "74890327033",
    "serial_number": "CD909837297",
    "place_of_origin": "SVH",
    "depot": "MN822",
    "quantity": "900"
  },
  {
    "order_by": "CDDUYT",
    "product_no": "43720943334",
    "serial_number": "CD909837298",
    "place_of_origin": "SRF",
    "depot": "BV675",
    "quantity": "1200"
  }
]

当我拨打 API 电话时,我会发送以下内容 json

{
  "FORMAT": [
    "order_by",
    "product_no",
    "serial_number"
  ]
}

我想要对 return 的响应只有前 json 中与 FORMAT 中指定的任何键匹配的 key/value 对。因此,对于上面的内容,我希望得到这样的响应:

[
      {
        "order_by": "CDDASD",
        "product_no": "69843270432",
        "serial_number": "CD909837296"
      },
      {
        "order_by": "CDDPOI",
        "product_no": "74890327033",
        "serial_number": "CD909837297"
      },
      {
        "order_by": "CDDUYT",
        "product_no": "43720943334",
        "serial_number": "CD909837298"
      }
    ]

我在遍历 FORMAT 中的值然后用这些值过滤第一个 json 时遇到问题。 我什至不确定应该使用 DataWeave 中的哪些功能。我应该在 FORMAT 上使用地图,然后在第一个 json 上使用过滤器吗?当需要一个对象时,我不断收到关于使用数组的错误,所以我不知所措。 抱歉缺少代码,我太困惑了,不知道我应该做什么。感谢所有帮助。

假设您的有效载荷始终是您提供的(不是嵌套结构),那么您可以使用 Map function to iterate over your payload and then filterObject 来实现您想要的输出

%dw 2.0
output application/json
var fields = {
  "FORMAT": [
    "order_by",
    "product_no",
    "serial_number"
  ]
}
---
payload map ((item) -> 
    item filterObject ((value, key) ->
    fields.FORMAT contains  (key as String) ))