jq将关键字名称及其子元素长度显示在一起



我想显示任意对象的键名及其组成部分的长度。我认为我的问题似乎是"长度"需要一个过滤器,这会使其他输出静音。

给定foo.json包含:

{
"lol": 1, 
"wtf": [1, 2, 3, 4], 
"bbq": {
"omg": "yes", 
"afk": "always"
}
}

我可以:

cat foo.json |jq 'keys'
[
"bbq",
"lol",
"wtf"
]

我可以:

cat foo.json |jq '.[] |length'
1
4
2

但是,我如何使两者处于同一条线上(或者我甚至可以接受交替(?

"bbq" 2
"lol" 1
"wtf" 4

假设您希望每个键的长度都在同一行上,则可以使用以下内容:

jq -r 'keys_unsorted[] as $k | [$k, (.[$k]|length)] | join(" ")' 

如果您希望引用密钥名称,请使用过滤器:

keys_unsorted[] as $k | ""($k)" (.[$k]|length)"

最新更新