如何编写一个函数,使用 dataweave 从传入数组中过滤对象?

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

有效负载:

[
                {
                  "noOfDocumentItemToSigner": [
                    "eSign_documentItemName1__c",
                     "eSign_documentItemName2__c"
                  ],
                  "contentVersion": "068DQ000000lK0iYAE",
                  "documentName": "ESRA with Exhibit_A"
                },
                {
                  "noOfDocumentItemToSigner": [
                    "eSign_documentItemName1__c"
                  ],
                  "contentVersion": "068DQ000000lK0OYAU",
                  "documentName": "ODP Agreement"
                }
              ]

JSON:

{
  "aAuDQ0000004mX60AI": [
    {
      "noOfDocumentItemToSigner": ["eSign_documentItemName1__c"],
      "contentVersion": "068DQ000000lK0iYAE",
      "documentName": "ESRA with Exhibit_A"
    },
    {
      "noOfDocumentItemToSigner": ["eSign_documentItemName1__c"],
      "contentVersion": "068DQ000000lK0OYAU",
      "documentName": "ODP Agreement"
    }
  ],
  "aAuDQ0000004mXG0AY": [
    {
      "noOfDocumentItemToSigner": ["eSign_documentItemName1__c"],
      "contentVersion": "068DQ000000lK0JYAU",
      "documentName": "ESRA For bb bb"
    },
    {
      "noOfDocumentItemToSigner": ["eSign_documentItemName1__c", "eSign_documentItemName2__c"],
      "contentVersion": "068DQ000000lK0OYAU",
      "documentName": "ODP Agreement"
    }
  ]
}

我想过滤输入数组中的内容版本是否与有效负载中的内容版本匹配。

我可以执行以下操作,但该值是硬编码的。我想迭代 JSON 对象并获取 noOfDocumentItemToSigner。

(payload filter ((item, index) -> item.contentVersion == "068DQ000000lK0iYAE")).noOfDocumentItemToSigner map ((item, index) -> {})
mule dataweave mulesoft mule4
1个回答
0
投票

您可以使用“后代”选择器获取所有可用内容版本的数组,如下所示

var allVersions = vars.inputJson..contentVersion

这是一种简单的方法,但我经历过上述方法对性能的影响。如果你的输入量很大,对性能影响很大,可以使用

valuesOf
的组合来获取所有版本的数组

var allVersions = flatten(valuesOf(vars.inputJson))

此后您可以从有效负载中过滤所需的版本

%dw 2.0
output application/json
var allVersions = flatten(valuesOf(vars.inputJson)).contentVersion
---
payload filter ((item, index) -> 
    allVersions contains item.contentVersion) 
map ((item, index) -> {
    // do the mapping here
})
© www.soinside.com 2019 - 2024. All rights reserved.