jq from_entries 函数适用于“key”但不适用于“name”

Mat*_*rog 3 json jq

根据文档, from_entries 函数适用于看起来像{"key": something, "value": something}, 或 的对象{"name": something, "value": something}。但是,第二种形式对我不起作用。文档中的示例有效:

$ echo '[{"key":"a", "value":1}, {"key":"b", "value":2}]' | jq from_entries
{
  "a": 1,
  "b": 2
}
Run Code Online (Sandbox Code Playgroud)

但同样的例子,除了使用“name”而不是“key”之外,不会:

$ echo '[{"name":"a", "value":1}, {"name":"b", "value":2}]' | jq from_entries
jq: error (at <stdin>:1): Cannot use null (null) as object key
Run Code Online (Sandbox Code Playgroud)

为什么是这样?我的 jq 版本是

$ jq --version
jq-1.5-1-a5b5cbe
Run Code Online (Sandbox Code Playgroud)

pea*_*eak 5

不幸的是,jq 1.5 不包括关于“名称”的增强。

(请注意 jq 1.5 文档正确地将“名称”作为“键”的替代,而不是“名称”。)

您要么必须升级 jq,要么使用解决方法,例如:

map(with_entries(if .key == "name" then .key = "key" else . end))
| from_entries
Run Code Online (Sandbox Code Playgroud)

或更笼统地说:

def from_entries(key; value):
  map( {(key): value} ) | add | . // {} ;

from_entries(.name; .value)
Run Code Online (Sandbox Code Playgroud)