如何在JSONAta中从数组移除存在于另一数组的对象?
JSONata 从数组中排除指定对象的实现方法
基于整个对象匹配
JSONata支持对象的深度相等比较,可直接沿用简单数组的排除逻辑:
$largerArray := [{"Name": "A", "Code": "100"} ,{"Name": "B", "Code": "200"},{"Name": "C", "Code": "300"}, {"Name": "D", "Code": "400"}]; $objectsToExclude := [{"Name": "A", "Code": "100"} ,{"Name": "B", "Code": "200"},{"Name": "C", "Code": "300"}]; $result := $largerArray[$not($ in $objectsToExclude)];
执行后$result将返回预期的[{"Name": "D", "Code": "400"}],JSONata会递归校验对象的所有键值对是否完全一致,匹配成功的对象会被排除。
基于Code属性匹配
若两个数组中的对象存在其他属性差异,仅需基于Code字段匹配排除,可先提取排除数组的Code集合,再过滤原数组:
$largerArray := [{"Name": "A", "Code": "100"} ,{"Name": "B", "Code": "200"},{"Name": "C", "Code": "300"}, {"Name": "D", "Code": "400"}]; $objectsToExclude := [{"Name": "A", "Code": "100"} ,{"Name": "B", "Code": "200"},{"Name": "C", "Code": "300"}]; $excludeCodes := $objectsToExclude.Code; $result := $largerArray[$not($.Code in $excludeCodes)];
这种写法兼容性更强,只要对象的Code值存在于排除集合中,就会被过滤掉。
内容的提问来源于stack exchange,提问作者rlk99
相关产品推荐
相关产品推荐

