我正在尝试从包含平面对象列表的json文件构建索引。
如果我使用结构
jq 'INDEX(.a + ":" + .b)' < data.json
我得到了我想要的。但是,如果我使用
jq 'INDEX(input; .a + ":" + .b) data.json
然后我得到了错误
jq: error (at data.json:<last-line>): break
我需要使用第二种形式的原因是,然后我需要将另一个input
联接到第一种形式的索引中,而我不知道如何从STDIN中进行操作。
有什么想法可以解决这个问题吗?
(当前在MacOS 10.13.6上运行jq-1.6)
添加输入(data.json):
[
{
"a": "a1",
"b": "b1",
"c": "c1",
"d": "d1"
},
{
"a": "a2",
"b": "b2",
"c": "c2",
"d": "d2"
},
{
"a": "a3",
"b": "b3",
"c": "c3",
"d": "d3"
}
]
预期输出
{
"a1:b1": {
"a": "a1",
"b": "b1",
"c": "c1",
"d": "d1"
},
"a2:b2": {
"a": "a2",
"b": "b2",
"c": "c2",
"d": "d2"
},
"a3:b3": {
"a": "a3",
"b": "b3",
"c": "c3",
"d": "d3"
}
}
答案 0 :(得分:1)
INDEX/2
的第一个参数应该是要索引的项目的流;在这里,.[]
正是我们想要的:
INDEX(.[]; .a + ":" + .b)
答案 1 :(得分:0)
对于jq版本1.5或更早版本,INDEX
似乎不起作用(不存在?),但这可以起作用:
jq 'map({key: (.a + ":" + .b), value: .}) | from_entries' data.json