如何使用Jolt规格移除JSON数组中的空对象
用Jolt移除JSON数组中的空对象
我需要处理一个包含空对象的JSON数组,目标是移除这些空对象。
输入:
{ "emails": [ { "email": "abc@abc.com" }, {}, {}, { "email": "abc@gmail.com" } ] }
期望输出:
{ "emails": [ { "email": "abc@abc.com" }, { "email": "abc@gmail.com" } ] }
我的尝试及问题:
我用了下面的Shift操作规格,但输出里空对象的位置变成了null,并没有被移除:
[ { "operation": "shift", "spec": { "emails": { "*": { "*": "&2.[&1].&" } } } } ]
当前错误输出:
{ "emails": [ "abc@abc.com", null, null, "abc@gmail.com" ] }
解决方案
方案一:用Shift操作直接过滤空对象
通过精准的Shift规则,只保留包含属性的非空对象:
[ { "operation": "shift", "spec": { "emails": { "*": { // 仅当当前对象存在属性时,将整个对象保留到emails数组 "@": "&2[]" } } } } ]
原理:@代表当前遍历到的整个对象,&2指向向上两级的emails键,[]会自动把符合条件的元素追加到数组中,空对象因没有任何属性,不会触发该规则,自然被跳过。
方案二:先转空对象为null,再移除
如果需要更明确的清理步骤,可以分两步操作:
[ { "operation": "shift", "spec": { "emails": { "*": { // 保留所有对象,空对象会被转为null "@": "&2[&1]" } } } }, { "operation": "remove", "spec": { "emails": { // 遍历数组,移除所有值为null的元素 "*": { "$null": "" } } } } ]
原理:第一步Shift将空对象转为null,第二步Remove操作遍历数组,精准移除所有null值元素,最终得到干净的数组。
内容的提问来源于stack exchange,提问作者Anderson_502
相关产品推荐
相关产品推荐

