Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.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
Mule 比较2个JSON数组以获得匹配和不匹配的输出_Mule_Mule Studio_Dataweave_Mule Component_Anypoint Studio - Fatal编程技术网

Mule 比较2个JSON数组以获得匹配和不匹配的输出

Mule 比较2个JSON数组以获得匹配和不匹配的输出,mule,mule-studio,dataweave,mule-component,anypoint-studio,Mule,Mule Studio,Dataweave,Mule Component,Anypoint Studio,我需要使用Mule 4 dataweave 2.0比较2个JSON数组,以获得匹配和不匹配的输出。 下面给出了示例输入JSON负载: [ { "CODE": "A11", "NAME": "Alpha", "ID": "C10000" }, { "CODE": "B12", "NAME": "Bravo", "ID": "B20000" }, {

我需要使用Mule 4 dataweave 2.0比较2个JSON数组,以获得匹配和不匹配的输出。 下面给出了示例输入JSON负载:

[
    {
        "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"
    }
]
这必须与下面的ID/IDENTITY字段进行比较

[
    {
        "IDENTITY": "D40000",
        "NM": "Delta"
    },
    {
        "IDENTITY": "C30000",
        "NM": "Charlie"
    }
]
我的预期输出是包含匹配和不匹配对象的2个变量数组:

varMatch: 
[
    {
        "CODE": "C11",
        "NAME": "Charlie",
        "ID": "C30000"
    },
    {
        "CODE": "D12",
        "NAME": "Delta",
        "ID": "D40000"
    }
]
varUnmatch:
[
    {
        "CODE": "A11",
        "NAME": "Alpha",
        "ID": "C10000"
    },
    {
        "CODE": "B12",
        "NAME": "Bravo",
        "ID": "B20000"
    },
    {
        "CODE": "E12",
        "NAME": "Echo",
        "ID": "E50000"
    }
]

如果ID映射来自其他地方,并且您无法更改其结构,我可能会重新映射它,然后像这样使用它:

%dw 2.0
output application/json

var identMap = [
    {
        "IDENTITY": "D40000",
        "NM": "Delta"
    },
    {
        "IDENTITY": "C30000",
        "NM": "Charlie"
    }
]

var remapped = identMap reduce ((item,accum={}) -> accum ++ (item.IDENTITY): 1)

---
payload groupBy (if (remapped[$.ID]?) "varMatched" else "varUnmatched")
产生

{
  "varUnmatched": [
    {
      "CODE": "A11",
      "NAME": "Alpha",
      "ID": "C10000"
    },
    {
      "CODE": "B12",
      "NAME": "Bravo",
      "ID": "B20000"
    },
    {
      "CODE": "E12",
      "NAME": "Echo",
      "ID": "E50000"
    }
  ],
  "varMatched": [
    {
      "CODE": "C11",
      "NAME": "Charlie",
      "ID": "C30000"
    },
    {
      "CODE": "D12",
      "NAME": "Delta",
      "ID": "D40000"
    }
  ]
}

如果ID映射来自其他地方,并且您无法更改其结构,我可能会重新映射它,然后像这样使用它:

%dw 2.0
output application/json

var identMap = [
    {
        "IDENTITY": "D40000",
        "NM": "Delta"
    },
    {
        "IDENTITY": "C30000",
        "NM": "Charlie"
    }
]

var remapped = identMap reduce ((item,accum={}) -> accum ++ (item.IDENTITY): 1)

---
payload groupBy (if (remapped[$.ID]?) "varMatched" else "varUnmatched")
产生

{
  "varUnmatched": [
    {
      "CODE": "A11",
      "NAME": "Alpha",
      "ID": "C10000"
    },
    {
      "CODE": "B12",
      "NAME": "Bravo",
      "ID": "B20000"
    },
    {
      "CODE": "E12",
      "NAME": "Echo",
      "ID": "E50000"
    }
  ],
  "varMatched": [
    {
      "CODE": "C11",
      "NAME": "Charlie",
      "ID": "C30000"
    },
    {
      "CODE": "D12",
      "NAME": "Delta",
      "ID": "D40000"
    }
  ]
}
希望这有帮助

%dw 2.0
var input1=[{
    "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 input2=[
{
    "IDENTITY": "D40000",
    "NM": "Delta"
},
{
    "IDENTITY": "C30000",
    "NM": "Charlie"
}
]
var varMatch =   input1 map $ filter (input2.IDENTITY contains $.ID)
var varUnmatch = input1 -- varMatch
output application/json
---
{
varMatch:   varMatch,
varUnmatch: varUnmatch
}
样本输出

{
"varMatch": [
{
  "CODE": "C11",
  "NAME": "Charlie",
  "ID": "C30000"
},
{
  "CODE": "D12",
  "NAME": "Delta",
  "ID": "D40000"
}
],
"varUnmatch": [
{
  "CODE": "A11",
  "NAME": "Alpha",
  "ID": "C10000"
},
{
  "CODE": "B12",
  "NAME": "Bravo",
  "ID": "B20000"
},
{
  "CODE": "E12",
  "NAME": "Echo",
  "ID": "E50000"
}
]
}
希望这有帮助

%dw 2.0
var input1=[{
    "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 input2=[
{
    "IDENTITY": "D40000",
    "NM": "Delta"
},
{
    "IDENTITY": "C30000",
    "NM": "Charlie"
}
]
var varMatch =   input1 map $ filter (input2.IDENTITY contains $.ID)
var varUnmatch = input1 -- varMatch
output application/json
---
{
varMatch:   varMatch,
varUnmatch: varUnmatch
}
样本输出

{
"varMatch": [
{
  "CODE": "C11",
  "NAME": "Charlie",
  "ID": "C30000"
},
{
  "CODE": "D12",
  "NAME": "Delta",
  "ID": "D40000"
}
],
"varUnmatch": [
{
  "CODE": "A11",
  "NAME": "Alpha",
  "ID": "C10000"
},
{
  "CODE": "B12",
  "NAME": "Bravo",
  "ID": "B20000"
},
{
  "CODE": "E12",
  "NAME": "Echo",
  "ID": "E50000"
}
]
}

下面是另一个解决方案,尽管前两个解决了您的问题:

%dw 2.0
output application/dw
var data = [
    {
        "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 searchData = [
    {
        "IDENTITY": "D40000",
        "NM": "Delta"
    },
    {
        "IDENTITY": "C30000",
        "NM": "Charlie"
    }
]
---
data dw::core::Arrays::partition (e) -> searchData.*IDENTITY contains e.ID

选择性能最好的解决方案并使用它。

这里有另一个解决方案,尽管前两个解决方案可以解决您的问题:

%dw 2.0
output application/dw
var data = [
    {
        "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 searchData = [
    {
        "IDENTITY": "D40000",
        "NM": "Delta"
    },
    {
        "IDENTITY": "C30000",
        "NM": "Charlie"
    }
]
---
data dw::core::Arrays::partition (e) -> searchData.*IDENTITY contains e.ID

选择性能最好的并使用它。

谢谢你的回答。我会试试这个。谢谢你的回答。我会尝试一下。谢谢你的回答。谢谢你的回答。谢谢你提供了一个替代的解决方案,非常感谢。只是为了语义准确<代码>(data dw::core::Array::partition(e)->searchData.*标识包含e.ID)mapObject{(($$)用(“varMatch”)替换“success”)用“varUnMatched”替换“failure”):$}非常感谢您提供了另一种解决方案,非常感谢。只是为了在语义上准确<代码>(数据dw::core::array::partition(e)->searchData.*标识包含e.ID)映射对象{(($$)将“success”替换为(“varMatch”))将“failure”替换为“varUnMatched”):$}