Filter 在Dataweave 2.0中使用两个或更多列值比较两个JSON数组
我有一项任务,需要使用每个数组的一列,根据相同的值比较和过滤两个Filter 在Dataweave 2.0中使用两个或更多列值比较两个JSON数组,filter,dataweave,mulesoft,Filter,Dataweave,Mulesoft,我有一项任务,需要使用每个数组的一列,根据相同的值比较和过滤两个JSON数组。所以我用了这个问题的答案 但是,现在我需要比较两个JSON数组,它们匹配两个甚至三个列的值 我已经试着在另一个中使用一个map,但是,它不起作用 这些例子可能就是我所用答案中的例子。比较db.code=file.code,db.name=file.nm和db.id=file.identity var db = [ { "CODE": "A11",
JSON
数组。所以我用了这个问题的答案
但是,现在我需要比较两个JSON
数组,它们匹配两个甚至三个列的值
我已经试着在另一个中使用一个map
,但是,它不起作用
这些例子可能就是我所用答案中的例子。比较db.code=file.code
,db.name=file.nm
和db.id=file.identity
var db = [
{
"CODE": "A11",
"NAME": "Alpha",
"ID": "C10000"
},
{
"CODE": "B12",
"NAME": "Bravo",
"ID": "B20000"
},
{
"CODE": "C11",
"NAME": "Charlie",
"ID": "C30000"
},
{
"CODE": "D12",
"NAME": "Delta",
"ID": "D40000"
},
{
"CODE": "E12",
"NAME": "Echo",
"ID": "E50000"
}
]
var file = [
{
"IDENTITY": "D40000",
"NM": "Delta",
"CODE": "D12"
},
{
"IDENTITY": "C30000",
"NM": "Charlie",
"CODE": "C11"
}
]
看看这对你有用吗
%dw 2.0
output application/json
var file = [
{
"IDENTITY": "D40000",
"NM": "Delta",
"CODE": "D12"
},
{
"IDENTITY": "C30000",
"NM": "Charlie",
"CODE": "C11"
}
]
var db = [
{
"CODE": "A11",
"NAME": "Alpha",
"ID": "C10000"
},
{
"CODE": "B12",
"NAME": "Bravo",
"ID": "B20000"
},
{
"CODE": "C11",
"NAME": "Charlie",
"ID": "C30000"
},
{
"CODE": "D12",
"NAME": "Delta",
"ID": "D40000"
},
{
"CODE": "E12",
"NAME": "Echo",
"ID": "E50000"
}
]
---
file flatMap(v) -> (
db filter (v.IDENTITY == $.ID and v.NM == $.NAME and v.CODE == $.CODE)
)
使用
flatMap
而不是map
进行展平,否则将在输出中获得更干净的数组数组,除非您希望每个文件
条目可能有多个匹配项,在这种情况下,我将坚持使用map查看这是否适合您
%dw 2.0
output application/json
var file = [
{
"IDENTITY": "D40000",
"NM": "Delta",
"CODE": "D12"
},
{
"IDENTITY": "C30000",
"NM": "Charlie",
"CODE": "C11"
}
]
var db = [
{
"CODE": "A11",
"NAME": "Alpha",
"ID": "C10000"
},
{
"CODE": "B12",
"NAME": "Bravo",
"ID": "B20000"
},
{
"CODE": "C11",
"NAME": "Charlie",
"ID": "C30000"
},
{
"CODE": "D12",
"NAME": "Delta",
"ID": "D40000"
},
{
"CODE": "E12",
"NAME": "Echo",
"ID": "E50000"
}
]
---
file flatMap(v) -> (
db filter (v.IDENTITY == $.ID and v.NM == $.NAME and v.CODE == $.CODE)
)
使用flatMap
而不是map
进行展平,否则将在输出中获得更干净的数组数组,除非您希望每个文件
条目可能有多个匹配项,在这种情况下,我坚持使用map可以直接比较DW中的对象,因此,可以将链接的解决方案修改为以下内容:
%dw 2.0
import * from dw::core::Arrays
output application/json
var db = [
{
"CODE": "A11",
"NAME": "Alpha",
"ID": "C10000"
},
{
"CODE": "B12",
"NAME": "Bravo",
"ID": "B20000"
},
{
"CODE": "C11",
"NAME": "Charlie",
"ID": "C30000"
},
{
"CODE": "D12",
"NAME": "Delta",
"ID": "D40000"
},
{
"CODE": "E12",
"NAME": "Echo",
"ID": "E50000"
}
]
var file = [
{
"IDENTITY": "D40000",
"NM": "Delta",
"CODE": "D12"
},
{
"IDENTITY": "C30000",
"NM": "Charlie",
"CODE": "C11"
}
]
---
db partition (e) -> file contains {IDENTITY:e.ID,NM:e.NAME,CODE:e.CODE}
可以直接比较DW中的对象,因此可以将链接的解决方案修改为以下内容:
%dw 2.0
import * from dw::core::Arrays
output application/json
var db = [
{
"CODE": "A11",
"NAME": "Alpha",
"ID": "C10000"
},
{
"CODE": "B12",
"NAME": "Bravo",
"ID": "B20000"
},
{
"CODE": "C11",
"NAME": "Charlie",
"ID": "C30000"
},
{
"CODE": "D12",
"NAME": "Delta",
"ID": "D40000"
},
{
"CODE": "E12",
"NAME": "Echo",
"ID": "E50000"
}
]
var file = [
{
"IDENTITY": "D40000",
"NM": "Delta",
"CODE": "D12"
},
{
"IDENTITY": "C30000",
"NM": "Charlie",
"CODE": "C11"
}
]
---
db partition (e) -> file contains {IDENTITY:e.ID,NM:e.NAME,CODE:e.CODE}
您可以直接使用过滤器
,也可以使用包含
db filter(value) -> file contains {IDENTITY: value.ID, NM: value.NAME, CODE: value.CODE}
这告诉您根据文件是否包含对象{IDENTITY:value.ID,NM:value.NAME,code:value.code}
来过滤db数组。但是,如果文件数组中的对象具有其他不用于比较的字段,则此操作将不起作用。使用上述方法,您可以更新筛选条件,以检查文件数组中是否存在条件适用的对象(使用数据选择器)。您可以使用下面的选项来检查
db filter(value) -> file[?($.IDENTITY==value.ID and $.NM == value.NAME and $.CODE == value.CODE)] != null
您可以直接使用过滤器
,也可以使用包含
db filter(value) -> file contains {IDENTITY: value.ID, NM: value.NAME, CODE: value.CODE}
这告诉您根据文件是否包含对象{IDENTITY:value.ID,NM:value.NAME,code:value.code}
来过滤db数组。但是,如果文件数组中的对象具有其他不用于比较的字段,则此操作将不起作用。使用上述方法,您可以更新筛选条件,以检查文件数组中是否存在条件适用的对象(使用数据选择器)。您可以使用下面的选项来检查
db filter(value) -> file[?($.IDENTITY==value.ID and $.NM == value.NAME and $.CODE == value.CODE)] != null