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

如何使用jq从JSON文件中完全删除所有空数组

问题原因

你现有的代码仅会过滤数组内部长度为0的元素,不会对遍历后本身变为空的数组节点做删除处理,所以空数组会保留。

解决方案

使用如下jq命令即可彻底删除所有层级的空数组,同时保留其他合法元素:

jq 'walk(if type == "array" then map(select(length > 0? // true)) | select(length > 0) else . end)' 你的JSON文件路径

逻辑说明

  • walk 会递归遍历JSON结构的所有层级节点
  • 遇到数组类型节点时,先执行map(select(length > 0? // true))过滤数组内部的空数组、空字符串等长度为0的元素:
    • length > 0? 末尾的?是安全运算符,避免数字、布尔值等没有length属性的元素调用length时报错
    • // true 表示如果元素本身没有length属性(比如数字、布尔值、null等),则直接保留该元素
  • 过滤完内部元素后,通过select(length > 0)判断当前数组如果本身长度为0,就直接删除该数组节点

效果示例

假设原JSON内容为:

{
  "empty_arr": [],
  "arr1": [1, "", [], [[]], "hello"],
  "nested": {
    "inner_empty": [],
    "arr2": [2, []]
  }
}

执行命令后输出结果为:

{
  "arr1": [1, "hello"],
  "nested": {
    "arr2": [2]
  }
}

内容的提问来源于stack exchange,提问作者Katja Eichelberger

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 01:54:03