arrays - 基于另一个数组值的 Dataweave 2.0 数组过滤
问题描述
我正在尝试匹配/过滤 unmatchedIds 数组中的以下 lineId 值,然后通过 processorTransactionId 过滤 exampleFile 的结果集。结果将是删除最后一个金融事务实体,其中处理器事务 ID =“000000062121029333”。
理论上 unmatchedIds 数组和 exampleFile 数组的大小都可以是无限的。
任何指导/建议/示例将不胜感激。目前我很难使用 dataweave 过滤器来实现这一点。
{
"unmatchedIds": [
{
"lineId": "000000062121029111"
},
{
"lineId": "000000062121029222"
}
]
}
示例文件
[{
"financialTransactionEntity": {
"cardAcceptor": {
"name": "Burger Inc.",
"countryCode": "GBP"
},
"financialTransaction": {
"debitOrCredit": "C",
"amountInOriginalCurrency": {
"amount": "0000001000",
"exponent": "2"
},
"originalCurrencyCode": "826",
"transactionDate": "2020-02-18"
},
"processorTransactionId": "000000062121029111"
}
},
{
"financialTransactionEntity": {
"cardAcceptor": {
"name": "McDonalds Inc.",
"countryCode": "GBP"
},
"financialTransaction": {
"debitOrCredit": "C",
"amountInOriginalCurrency": {
"amount": "0000002000",
"exponent": "2"
},
"originalCurrencyCode": "826",
"transactionDate": "2020-02-18"
},
"processorTransactionId": "000000062121029222"
}
},
{
"financialTransactionEntity": {
"cardAcceptor": {
"name": "McDonalds Inc.",
"countryCode": "GBP"
},
"financialTransaction": {
"debitOrCredit": "C",
"amountInOriginalCurrency": {
"amount": "0000002000",
"exponent": "2"
},
"originalCurrencyCode": "826",
"transactionDate": "2020-02-18"
},
"processorTransactionId": "000000062121029333"
}
}
]
解决方案
您可以使用带有过滤器的数据选择器。见下文
%dw 2.0
output application/java
import * from dw::core::Arrays
var unMatchedIds = {
"unmatchedIds": [
{
"lineId": "000000062121029111"
},
{
"lineId": "000000062121029222"
}
]
}
var payload = [{
"financialTransactionEntity": {
"cardAcceptor": {
"name": "Burger Inc.",
"countryCode": "GBP"
},
"financialTransaction": {
"debitOrCredit": "C",
"amountInOriginalCurrency": {
"amount": "0000001000",
"exponent": "2"
},
"originalCurrencyCode": "826",
"transactionDate": "2020-02-18"
},
"processorTransactionId": "000000062121029111"
}
},
{
"financialTransactionEntity": {
"cardAcceptor": {
"name": "McDonalds Inc.",
"countryCode": "GBP"
},
"financialTransaction": {
"debitOrCredit": "C",
"amountInOriginalCurrency": {
"amount": "0000002000",
"exponent": "2"
},
"originalCurrencyCode": "826",
"transactionDate": "2020-02-18"
},
"processorTransactionId": "000000062121029222"
}
},
{
"financialTransactionEntity": {
"cardAcceptor": {
"name": "McDonalds Inc.",
"countryCode": "GBP"
},
"financialTransaction": {
"debitOrCredit": "C",
"amountInOriginalCurrency": {
"amount": "0000002000",
"exponent": "2"
},
"originalCurrencyCode": "826",
"transactionDate": "2020-02-18"
},
"processorTransactionId": "000000062121029333"
}
}
]
---
using (unMatchedArray = unMatchedIds.unmatchedIds.*lineId)
payload[?(unMatchedArray contains $.financialTransactionEntity.processorTransactionId)]
这里的 unMatchedArray 只是来自原始对象 (unMatchedIds) 的不匹配 id 的列表。如果 FinancialTransactionEntity.processorTransactionId 在 unMatchedArray 中,数据选择器将只包含条目。