Скобки в JQ для .key

Я не понимаю, почему ключ должен быть в (), чтобы это работало:

# kbrandt at glade.local in ~ on git:master x [15:08:19]
$ cat host | jq '. | to_entries | map({ (.key) : .value.CPU.PercentUsed })' | tail
  {
    "rpi-b827eb2d7d23": 10.333333333333334
  },
  {
    "rpi-b827eb8d7c8d": 60
  },
  {
    "rpi-b827eba999fa": 40.733333333333334
  }
]

# kbrandt at glade.local in ~ on git:master x [15:08:54]
$ cat host | jq '. | to_entries | map({ .key : .value.CPU.PercentUsed })' | tail
jq: error: syntax error, unexpected FIELD (Unix shell quoting issues?) at <top-level>, line 1:
. | to_entries | map({ .key : .value.CPU.PercentUsed })
jq: 1 compile error

person Kyle Brandt    schedule 13.11.2015    source источник


Ответы (1)


При определении литерала объекта скобки указывают, что значением выражения должно быть имя свойства. В противном случае, если вы не использовали круглые скобки, это буквальное имя.

Таким образом, это эквивалентные способы определения объекта со свойством "foo":

{ foo: 1 }
{ "foo": 2 }
"foo" as $name | { ($name): 3 }
{ somename: "foo" } | { (.somename): 4 }
person Jeff Mercado    schedule 13.11.2015
comment
Так почему же .value.CPU.PercentUsed не нужно заключать в круглые скобки? - person Kyle Brandt; 13.11.2015
comment
Это значение этого свойства. Это требуется только для ключа, если вы хотите указать имя по значению. Вам не обязательно указывать значение в круглых скобках. - person Jeff Mercado; 13.11.2015