使用 jq 获取给定键及其父键的值

A1t*_*t0r 8 json 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
  }
}
Run Code Online (Sandbox Code Playgroud)

我想为每个对象 id 检索“conns”属性的值。我是 jq 的新手,我找不到明确的例子。

我尝试了以下方法:

echo "$OUTPUT" | jq -r .[].conns
Run Code Online (Sandbox Code Playgroud)

它返回 conns 的所有值,但这不是我需要的。预期的输出将是:

1 1.0
2 2.0
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

gle*_*man 10

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

似乎 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
Run Code Online (Sandbox Code Playgroud)

参考: