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

如何用含OR逻辑的jq一行命令获取不同层级的同名属性

用一行jq命令同时获取父级和子级的name属性

嗨,这问题其实很容易解决,有两种实用的方式可以实现你要的效果,我给你拆解清楚:

方法一:直接合并已有选择器(适合固定的父-子两层结构)

既然你已经知道单独获取父级和子级name的命令,只需要把两个选择器用逗号连接起来就行——逗号在jq里的作用是依次输出多个表达式的结果。

对应的一行命令:

jq '.[] | (.name, .children[].name)' your-data.json

原理说明

  1. .[] 遍历顶层数组里的每个对象;
  2. (.name, .children[].name) 先输出当前对象的name(父级),再遍历children数组输出每个子对象的name,两者的结果会依次打印出来。

方法二:递归遍历(适合任意嵌套层级的通用场景)

如果你的JSON结构后续可能有更多层级的嵌套(比如子对象还有自己的children),可以用递归遍历的方式,一次性拿到所有层级的name:

对应的一行命令:

jq '.. | .name? // empty' your-data.json

原理说明

  1. .. 是jq的递归遍历操作符,会遍历JSON中的所有元素(包括嵌套的子对象、数组等);
  2. .name? 尝试获取当前元素的name属性,加?是为了避免元素没有name时抛出错误;
  3. // empty 会把获取不到name时返回的null过滤掉,只保留有效的name值。

测试验证

用你提供的JSON数据:

[{ "name": "asd", "children": [ { "name": "sfgdfg" }] }]

两种命令都会输出:

"asd"
"sfgdfg"

完全符合你要同时获取两类name的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:52:34