【问题标题】:Compare two arrays and return the difference in Dataweave比较两个数组并返回 Dataweave 中的差异
【发布时间】:2023-03-03 01:08:02
【问题描述】:

我想根据一个 ID 比较两个数组,并在 ID 有任何差异的情况下返回 array2。

数组1:

[
  {
    "EmpNo": "00016610",
    "Project": "ABC",
    "Country": "USA",
    "EmailAddress": "sd@abc.com"
  },
  {
    "EmpNo": "100280",
    "Project": "XYZ",
    "Country": "USA",
    "EmailAddress": "ab.cd@abc.com"
  }
]

数组2:

[
  {
    "EmpNo": "00016610",
    "Project": "ABC",
    "Country": "CA",
    "EmailAddress": "sd1@abc.com"
  },
  {
    "EmpNo": "100280",
    "Project": "XYZ",
    "Country": "USA",
    "EmailAddress": "ab.cd@abc.com"
  }
]

预期输出:

[
  {
    "EmpNo": "00016610",
    "Project": "ABC",
    "Country": "CA",
    "EmailAddress": "sd1@abc.com"
  }
]

提前致谢

【问题讨论】:

  • 数组中每个元素的所有键是否总是相同的?
  • 是的,两个数组的所有键始终相同

标签: dataweave mule4


【解决方案1】:

您可以使用diff 返回两个对象之间的差异,并可以使用其输出来实现您的目标。

类似的东西

脚本

%dw 2.0
import diff from dw::util::Diff
output application/json
var arr1=   [
  {
    "EmpNo": "00016610",
    "Project": "ABC",
    "Country": "USA",
    "EmailAddress": "sd@abc.com"
  },
  {
    "EmpNo": "100280",
    "Project": "XYZ",
    "Country": "USA",
    "EmailAddress": "ab.cd@abc.com"
  }
]

var arr2= [
  {
    "EmpNo": "00016610",
    "Project": "ABC",
    "Country": "CA",
    "EmailAddress": "sd1@abc.com"
  },
  {
    "EmpNo": "100280",
    "Project": "XYZ",
    "Country": "USA",
    "EmailAddress": "ab.cd@abc.com"
  }
]
---
diff(arr2,arr1)

输出

{
  "matches": false,
  "diffs": [
    {
      "expected": "\"sd@abc.com\"",
      "actual": "\"sd1@abc.com\"",
      "path": "(root)[0].EmailAddress"
    },
    {
      "expected": "\"USA\"",
      "actual": "\"CA\"",
      "path": "(root)[0].Country"
    }
  ]
}

【讨论】:

  • 你也可以做 arr2 -- arr1 这也应该输出你的预期结果
猜你喜欢
  • 1970-01-01
  • 2014-02-26
  • 1970-01-01
  • 2021-08-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多