JQ:无论深度多少层都访问元素

Ola*_*laf 8 json nested jq

给定文件test.json

{
  "file": {
    "id": "123456789",
    "name": "137.txt"
  },
  "lines": 219,
  "characters": 2456
}
Run Code Online (Sandbox Code Playgroud)

我想name从命令行使用 JQ 访问元素。

打字jq .file.name test.json会产生137.txt. 完美的!

不幸的是,我们真正的 json 结构要大得多,输入元素的完整路径可能会很痛苦。

name是否可以在不输入完整路径的情况下检索 的值?就像jq *.name test.json成为*通配符一样?

Ini*_*ian 15

一种方法是使用 进行深度递归以..尽可能深入,并且如果该值存在且不为,则为

jq '.. | .name? | select(. != null)'
Run Code Online (Sandbox Code Playgroud)