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)"
我想显示任意对象的键名及其组成部分的长度。我认为我的问题似乎是 '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)"