根据the documentation,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
}
但使用相同的示例,除了使用“名称”代替“键”之外,不会:
$ echo '[{"name":"a", "value":1}, {"name":"b", "value":2}]' | jq from_entries
jq: error (at <stdin>:1): Cannot use null (null) as object key
这是为什么?我的jq版本是
$ jq --version
jq-1.5-1-a5b5cbe
答案 0 :(得分:3)
不幸的是,jq(即jq 1.5)的“正式发布”不包含有关“名称”的增强功能。
(请注意,jq 1.5文档正确地宣传了“名称”作为“键”的替代,而不是“名称”。)
您要么必须升级您的jq,要么使用解决方法,例如:
map(with_entries(if .key == "name" then .key = "key" else . end))
| from_entries
或更笼统地说:
def from_entries(key; value):
map( {(key): value} ) | add | . // {} ;
from_entries(.name; .value)