如何jq打印键(不是键的值)并遍历键以打印子值

Dav*_*ani 8 jq

我可以打印密钥:

$ jq -r '.indices | keys[]'
plan
resource
user
Run Code Online (Sandbox Code Playgroud)

我可以打印子值:

$ jq '.indices[] | .primaries.docs.count'
14208
1427143
104475
Run Code Online (Sandbox Code Playgroud)

如何打印键和子值?

plan: 14208
resource: 1427143
user: 104475
Run Code Online (Sandbox Code Playgroud)

and*_*lrc 7

以下可能有效:

$ jq -r '.indices | to_entries[] | "\(.key): \(.value.primaries.docs.count)"' input.json
plan: 14208
resource: 1427143
user: 104475
Run Code Online (Sandbox Code Playgroud)

以上假设输入为:

{
  "indices": {
    "plan":     { "primaries": { "docs": { "count": 123 }}},
    "resource": { "primaries": { "docs": { "count": 456 }}},
    "user":     { "primaries": { "docs": { "count": 789 }}}
  }
}
Run Code Online (Sandbox Code Playgroud)

to_entries将对象转换为indices数组:

[
  { "key": "plan", "value": { ... } },
  ...,
  ...
]
Run Code Online (Sandbox Code Playgroud)

然后可以轻松地将其映射。


jq1*_*727 5

这是直接使用密钥的解决方案:

  .indices
| keys[] as $k
| "\($k): \(.[$k].primaries.docs.count)"
Run Code Online (Sandbox Code Playgroud)