如何使用jq提取所有(也嵌套的)键名

wjt*_*jtk 6 json jq

如何提取所有键名,即使在带有jq的嵌套对象中也是如此?例如,我有json:

{ "a": 1, "b": { "c": 2 } }

我想得到清单:a,b,bc

我知道对于顶级密钥,我可以通过以下命令获得它 . | to_entries[] | .key,但是嵌套对象中的密钥呢?

Rom*_*est 6

简短的jq解决方案:

jq -r '[paths | join(".")]'  jsonfile
Run Code Online (Sandbox Code Playgroud)

输出:

[
  "a",
  "b",
  "b.c"
]
Run Code Online (Sandbox Code Playgroud)
  • paths 函数将路径输出到其输入中的所有元素

  • join(".") -在层次路径中串联键

  • 哇,太简单了,很高兴我问了,谢谢。我只会添加它以避免错误:当json中有数组时,“不能添加字符串(“。”)和数字(0)”应该将映射添加到字符串:`paths | map(。| tostring)| join(“。”)` (3认同)