如何使用 DataWeave 和 return 索引比较 JSON 个对象数组
How to compare Array of JSON Objects using DataWeave and return the indexes
我知道有很多 DataWeave 函数可以完成这项工作。但正在努力寻找适合我使用的东西。
比较两个 JSON 对象数组和 return 索引。
这里是 payload1:[ { "a": 1 }, { "a": 2 }, { "a": 3 } ]
和 payload2:[{"a":2}]
所以我希望看到结果为 payload1 的 index=1。有什么想法吗?
您可以使用的一些函数是 find
或 dw::core::Arrays::indexOf
。
这满足您的初始要求:
import indexOf from dw::core::Arrays
var payload1 = [ { "a": 1 }, { "a": 2 }, { "a": 3 } ]
var payload2 = [ {"a":2} ]
---
"index=" ++ (payload1 indexOf payload2[0]) ++ " of payload1"
这是一个更复杂的场景,使用 find
为多个元素获取多个索引:
var payload1 = [ { "a": 1 }, { "a": 2 }, { "a": 3 } , { "a": 2 }]
var payload2 = [{ "a": 2 }, { "a": 3 }, { "a": 5 } ]
---
{ items:
payload2 reduce ((item, indexes = []) ->
do {
var itemIndexes = payload1 find item
---
if(isEmpty(itemIndexes))
indexes
else
indexes+ ( {
item: item,
indexes: (payload1 find item)
})
}
)
}
输出如下所示:
{ "items": [
{
"item": { "a": 2 },
"indexes": [ 1, 3 ]
},{
"item": { "a": 3 },
"indexes": [ 2 ]
}
]}
我知道有很多 DataWeave 函数可以完成这项工作。但正在努力寻找适合我使用的东西。
比较两个 JSON 对象数组和 return 索引。
这里是 payload1:[ { "a": 1 }, { "a": 2 }, { "a": 3 } ]
和 payload2:[{"a":2}]
所以我希望看到结果为 payload1 的 index=1。有什么想法吗?
您可以使用的一些函数是 find
或 dw::core::Arrays::indexOf
。
这满足您的初始要求:
import indexOf from dw::core::Arrays
var payload1 = [ { "a": 1 }, { "a": 2 }, { "a": 3 } ]
var payload2 = [ {"a":2} ]
---
"index=" ++ (payload1 indexOf payload2[0]) ++ " of payload1"
这是一个更复杂的场景,使用 find
为多个元素获取多个索引:
var payload1 = [ { "a": 1 }, { "a": 2 }, { "a": 3 } , { "a": 2 }]
var payload2 = [{ "a": 2 }, { "a": 3 }, { "a": 5 } ]
---
{ items:
payload2 reduce ((item, indexes = []) ->
do {
var itemIndexes = payload1 find item
---
if(isEmpty(itemIndexes))
indexes
else
indexes+ ( {
item: item,
indexes: (payload1 find item)
})
}
)
}
输出如下所示:
{ "items": [
{
"item": { "a": 2 },
"indexes": [ 1, 3 ]
},{
"item": { "a": 3 },
"indexes": [ 2 ]
}
]}