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

如何使用jq仅针对树形JSON对象的叶子节点进行过滤与展平?

用jq提取树形JSON的叶子节点并展平

没问题,我帮你搞定这个需求!要提取树形JSON里的所有叶子节点(也就是没有nodes子节点的节点),并只保留它们的name字段组成数组,用下面这个jq命令就可以完美实现:

jq '[.. | select(has("name") and (has("nodes") | not)) | {name}]'

命令拆解说明:

  • ..:递归遍历整个JSON结构的所有节点,不管它在树的哪一层
  • select(has("name") and (has("nodes") | not)):筛选出同时满足两个条件的节点:
    1. 包含name字段(确保是我们要的节点类型)
    2. 不包含nodes字段(这就是定义里的“叶子节点”)
  • {name}:把筛选出来的节点只保留name字段,构造成新的对象
  • 外层的[]:把所有符合条件的对象收集成一个数组,就是你要的输出格式

示例验证

把你提供的JSON对象作为输入:

{
  "name": "root",
  "nodes": [
    {"name": "foo1"},
    {"name": "foo2", "nodes": [{"name": "bar"}]}
  ]
}

运行上面的jq命令后,输出结果完全符合你的预期:

[{"name": "foo1"}, {"name": "bar"}]

如果你的实际场景中,叶子节点的定义是nodes为空数组(而不是完全没有nodes字段),只需要把筛选条件改成select(has("name") and (.nodes | length == 0))就可以适配啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.01 02:53:12