web-dev-qa-db-ja.com

キー(キーの値ではない)をjqで印刷し、キーを反復処理してサブ値を印刷する方法

キーを印刷できます:

$ jq -r '.indices | keys[]'
plan
resource
user

サブ値を出力できます:

$ jq '.indices[] | .primaries.docs.count'
14208
1427143
104475

キーとサブ値を印刷するにはどうすればよいですか?

plan: 14208
resource: 1427143
user: 104475
8
David Vasandani

以下が機能する可能性があります。

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

上記は、入力が次のとおりであることを前提としています。

{
  "indices": {
    "plan":     { "primaries": { "docs": { "count": 123 }}},
    "resource": { "primaries": { "docs": { "count": 456 }}},
    "user":     { "primaries": { "docs": { "count": 789 }}}
  }
}

to_entriesはオブジェクトindicesを配列に変換します。

[
  { "key": "plan", "value": { ... } },
  ...,
  ...
]

その後、簡単にマッピングできます。

7
andlrc

キーを直接使用するソリューションは次のとおりです。

  .indices
| keys[] as $k
| "\($k): \(.[$k].primaries.docs.count)"
5
jq170727