Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Filter 在Dataweave 2.0中使用两个或更多列值比较两个JSON数组_Filter_Dataweave_Mulesoft - Fatal编程技术网

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