如何在JOLT转换中实现多条件OR/AND逻辑过滤?
在JOLT中实现多条件OR/AND逻辑
当然可以在JOLT中构建OR或AND逻辑,核心是通过shift操作的嵌套分支来组合多条件,以下针对你的需求给出具体实现方案:
需求回顾
你需要筛选数组中满足 exists: true 或 description: "hello world" 的元素,输入JSON如下:
[ { "alpha": "a", "beta": "b", "omega": "o", "exists": true, "description": "goodbye world" }, { "alpha": "1", "beta": "2", "omega": "3", "exists": false, "description": "hello world" }, { "alpha": "z", "beta": "x", "omega": "y", "exists": true, "description": "hello mars" } ]
实现OR逻辑的JOLT规则
[ { "operation": "shift", "spec": { "*": { // 条件1:exists为true时保留元素 "exists": { "true": { "@2": "[#2]" } }, // 条件2:description为"hello world"时保留元素 "description": { "hello world": { "@2": "[#2]" } } } } }, // 去重:处理同时满足两个条件的重复元素 { "operation": "remove", "spec": { "*": { "*": { "$": "" } } } } ]
规则解释
Shift阶段:
- 遍历数组每个元素(
"*"),分别对exists和description字段做条件判断 @2表示向上两层引用整个当前元素(当前在字段层级,向上两层回到元素本身)[#2]用于保持元素在原数组中的索引位置,避免打乱顺序- 若元素同时满足两个条件,会被写入两次,因此需要后续去重
- 遍历数组每个元素(
Remove阶段:
- 遍历每个数组元素,移除重复的键结构,确保每个元素只保留一份
输出结果
转换后会保留所有三个元素,符合预期:
[ { "alpha": "a", "beta": "b", "omega": "o", "exists": true, "description": "goodbye world" }, { "alpha": "1", "beta": "2", "omega": "3", "exists": false, "description": "hello world" }, { "alpha": "z", "beta": "x", "omega": "y", "exists": true, "description": "hello mars" } ]
扩展:AND逻辑实现思路
如果需要实现同时满足多个条件的AND逻辑,可以嵌套条件分支。例如要保留exists: true且description: "hello mars"的元素,规则如下:
[ { "operation": "shift", "spec": { "*": { "exists": { "true": { "@(2,description)": { "hello mars": { "@4": "[#4]" } } } } } } } ]
内容的提问来源于stack exchange,提问作者rsnyder
相关产品推荐
相关产品推荐

