jq 一起显示键名和它们的子元素长度

jq display key names and their child element lengths together

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

鉴于 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)"