Jolt转换数组出现null元素及清除失效问题咨询
问题解析与解决方案
为什么会出现null元素?
Shift操作中,widgets[&3]里的&3引用的是原数组的索引位置(原数组有3个元素,索引0、1、2)。即使某个索引对应的元素不匹配目标类型(如BAR或FOO),Jolt仍会为该索引位置创建占位,无匹配值时填充null,因此数组长度与原数组一致,出现null元素。
为什么recursivelySquashNulls无效?
recursivelySquashNulls的作用是移除对象中的null属性,不会处理数组中的null元素。它仅清理对象结构里的空值字段,对数组元素无效。
如何得到预期输出?
有两种方案可以实现无null元素的数组:
方案1:调整Shift规则,直接收集匹配项
修改Shift逻辑,不指定原数组索引,而是直接向widgets数组追加匹配的元素:
[ { "operation": "shift", "spec": { "widgets": { "*": { "type": { "BAR": { "@(2,id)": "widgets[]" } } } } } } ]
这种写法会直接生成仅包含匹配元素的数组,不会产生null占位。
方案2:后续添加Remove操作过滤null
如果需要保留原Shift逻辑,可在后续添加remove操作移除数组中的null元素:
[ { "operation": "shift", "spec": { "widgets": { "*": { "type": { "BAR": { "@(2,id)": "widgets[&3].barId" } } } } } }, { "operation": "remove", "spec": { "widgets": { "*": { "$": ["null"] } } } } ]
该操作会遍历widgets数组,移除值为null的元素。
内容的提问来源于stack exchange,提问作者user272735
相关产品推荐
相关产品推荐

