首页 > 解决方案 > 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

标签: arraysjsonkeyjq

解决方案


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

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

如果要引用键名,请使用过滤器:

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

推荐阅读