You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 13:50:00