如何在Jolt中根据type字段提取元素并设置typeBFlag标志?
Jolt 处理对象列表的解决方案
核心思路
- 用
shift操作精准定位并提取type="B"的元素,同时设置typeBFlag:true,仅在匹配成功时执行该逻辑 - 用
default操作兜底,当未匹配到type="B"时,自动设置typeBFlag:false - 全程避免遍历列表时重复设置标志位,彻底防止标志位变为数组的问题
Jolt 转换规范
[ { "operation": "shift", "spec": { "*": { "type": { "B": { "@(2)": "", // 提取当前type="B"的完整对象 "#true": "typeBFlag" // 标志位设为true } } } } }, { "operation": "default", "spec": { "typeBFlag": false // 未匹配到type="B"时的默认值 } } ]
示例验证
情况1:输入包含type="B"的元素
输入:
[ {"type": "A", "value": "a1"}, {"type": "B", "value": "b1"}, {"type": "C", "value": "c1"} ]
输出:
{ "type": "B", "value": "b1", "typeBFlag": true }
情况2:输入不包含type="B"的元素
输入:
[ {"type": "A", "value": "a1"}, {"type": "C", "value": "c1"} ]
输出:
{ "typeBFlag": false }
关键细节说明
shift操作中通过"*"."type"."B"的嵌套匹配,仅对type为B的元素执行提取和标志位设置,不会触发其他元素的处理逻辑default操作的优先级低于shift,只有当typeBFlag字段不存在时才会生效,确保匹配成功时的true值不会被覆盖- 这种方案没有在遍历列表时全局设置标志位,从根源上避免了标志位因多次赋值变成数组的问题
内容的提问来源于stack exchange,提问作者Kaushik
相关产品推荐
相关产品推荐

