jq を使用して、特定のキーとその親キーの値を取得します。

jq を使用して、特定のキーとその親キーの値を取得します。

次のJSONオブジェクトがあります。

{
  "1": {
    "available_memory": 1086419656.0,
    "available_memory_no_overbooking": 1086419656.0,
    "conns": 1.0
  },
  "2": {
    "available_memory": 108641236.0,
    "available_memory_no_overbooking": 10861216.0,
    "conns": 2.0
  }
}

各オブジェクトIDの "conns"属性値を取得したいと思います。私はjqに最初に触れましたが、明確な例が見つかりませんでした。

私は以下を試しました:

echo "$OUTPUT" | jq -r .[].conns

connsのすべての値を返しますが、それは私が必要とするものではありません。予想される出力は次のとおりです。

1 1.0
2 2.0

どんなアイデアがありますか?

ベストアンサー1

$ jq -r 'keys[] as $k | "\($k) \(.[$k].conns)"' file.json
1 1
2 2

jqは1.0を1に、2.0を2に変換するようです。明確にするために入力を変更します。

$ cat file.json
{
  "1a": {
    "available_memory": 1086419656.0,
    "available_memory_no_overbooking": 1086419656.0,
    "conns": 1.1
  },
  "2b": {
    "available_memory": 108641236.0,
    "available_memory_no_overbooking": 10861216.0,
    "conns": 2.2
  }
}
$ jq -r 'keys[] as $k | "\($k) \(.[$k].conns)"' file.json
1a 1.1
2b 2.2

参考資料:

おすすめ記事