gpt4 book ai didi

dataweave - 如何使用 Dataweave 2.0 比较和合并两个 JSON 对象

转载 作者:行者123 更新时间:2023-12-05 05:33:20 25 4
gpt4 key购买 nike

我有一个要求,我需要比较 2 个输入 json 对象 - obj1 和 obj2。两个输入可以有相同的键,也可以有额外的键。

  1. 如果两个输入中的键相同,则应从 obj2 中获取值。
  2. 如果 obj2 中的键不可用,它应该从 obj1 中获取键和值。
  3. 如果键在 obj1 中不可用,它应该从 obj2 中获取键和值。

下面是示例输入和预期输出

输入:

对象 1:

{
"id": "123",
"fname": "John",
"lname": "Sam",
"gender": "F",
"address1": {
"country": "USA",
"city": "San Jose",
"pin": null
},
"officeDetails": [
{
"workLocation": "Home"
}
]
}

对象 2:

{
"id": "123",
"fname": "Victor",
"lname": "Sam",
"age": "11",
"gender": "",
"address1": {
"country": "USA",
"pin": 95112
},
"officeDetails": [
{
"laptop": "Y",
"mouse": "Y"
}
]
}

预期输出:

{
"id": "123",
"fname": "Victor",
"lname": "Sam",
"age": "11",
"gender": "",
"address1": {
"country": "USA",
"city": "San Jose",
"pin": 95112
},
"officeDetails": [
{
"laptop": "Y",
"mouse": "Y",
"workLocation": "Home"
}
]
}

提前致谢

最佳答案

我想出了以下解决方案

  1. 过滤仅在 obj2 中的字段(obj2 filterObject !obj1[$$]?)并将它们安全地添加到结果中。
  2. 现在根据以下条件映射 obj1 中的每个字段
    • 如果该字段不存在于 obj2 中,则只需使用与 obj1 相同的值
    • 否则如果该字段是Object。我假设 obj2 中的字段值可以是 Object 或 Null。使用该假设,我刚刚使用递归对这些对象重复该过程。
    • 否则,如果该字段是Array,则使用map 将数组的每个元素从obj1 映射到与obj2 合并。
    • 否则只映射来自 obj2 的字段。
%dw 2.0
output application/json

fun nestedMergeWith(obj1: Object, obj2: Object) =
{
( obj2 filterObject !obj1[$$]? ), // fields in obj2 not in obj1
( obj1 mapObject {
($$): $ match {
case val if(!obj2[$$]?) -> val
case val is Object -> val nestedMergeWith obj2[$$]
case val is Array -> val map ((item, index) -> item nestedMergeWith obj2[$$][index])
else -> obj2[$$]
}
})
}

/**
* Below function is to handler if there is a case where a field is present in both objects
* but it is an Object in obj1 and Null in obj2.
* You do not need this function if this is not a case.
* Similarly if there can be a condition that the field in obj1 can be an object and can be a string/int etc in obj2,
* you can create similar function to satisfy those use case as required
*/
fun nestedMergeWith(obj1: Object, obj2: Null) = obj1
---
vars.obj1 nestedMergeWith vars.obj2

关于dataweave - 如何使用 Dataweave 2.0 比较和合并两个 JSON 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73886401/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com