如何使用Jolt Transformation规范移除数组中的null元素?
使用Jolt移除数组中的null元素
需要移除数组中的null元素,示例如下:
输入:
{ "arrayOne": [ null, { "key1": "value1", "key2": "value2" } ] }
期望输出:
{ "arrayOne": [ { "key1": "value1", "key2": "value2" } ] }
尝试使用recursivelySquashNulls未生效,所用Jolt spec如下:
[ { "operation": "modify-overwrite-beta", "spec": { "*": "=recursivelySquashNulls" } } ]
解决方案
recursivelySquashNulls的作用是移除对象中的null属性,无法直接过滤数组内的null元素。要实现数组null元素的过滤,可使用shift操作,通过遍历数组并判断元素非null来保留有效项:
针对指定数组的Spec
[ { "operation": "shift", "spec": { "arrayOne": { "*": { // 仅保留非null的数组元素 "@": "arrayOne.[#2]" } } } } ]
说明
arrayOne.*遍历目标数组的每一个元素@代表当前遍历到的元素[#2]是Jolt的索引标记,会自动为非null元素重新生成连续的数组索引,从而剔除null项
适配所有数组的通用Spec
如果需要处理所有顶级数组(而非仅arrayOne),可以用通配符实现:
[ { "operation": "shift", "spec": { "*": { // 匹配所有顶级键 "*": { "@": "&2.[#2]" // &2 引用外层的顶级键(即数组名) } } } } ]
内容的提问来源于stack exchange,提问作者user2988851
相关产品推荐
相关产品推荐

