如何使用 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。有什么想法吗?

您可以使用的一些函数是 finddw::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 ]
    }
]}