我有一个像这样的JSON数组:
[
{
"name": "Bo",
"type": "dog"
},
{
"name": "Roxer",
"type": "dog"
},
{
"name": "Paws",
"type": "cat"
}
]
我正在尝试将其转换为以type
为键的对象,如下所示:
{
"dog": [
{
"name": "Bo",
"type": "dog"
},
{
"name": "Roxer",
"type": "dog"
}
],
"cat": [
{
"name": "Paws",
"type": "cat"
}
]
}
我发现this answer使用了map,但是它假设type
是唯一的,并且没有将其转换为数组:
reduce .[] as $i ({}; .[$i.type] = $i)
第一次插入值时,应将其插入为[$i]
。在任何其他时间,都应附加[] + $i
。
答案 0 :(得分:4)
您的情况不同于the one you found,因为您将对象放入数组中。尝试对Jeff Mercado的解决方案进行此修改。
@Poller
答案 1 :(得分:1)
在group_by()
字段上使用.type
然后用.type
作为键创建最终结果的另一种可能的方法
jq 'group_by(.type)[] | { (.[0].type) : . }'
此方法的唯一区别是group_by()
在产生结果之前按.type
字段进行排序,因此键的顺序将有所不同。