jq:翻转或转置到 dict 对象

jq: flip or transpose to dict object

这是我的文档:

{
   "id":"06b6751f-5125-4e48-b588-fcc8ff56004f",
   "dni":"78081181"
}
{
   "id":"4bdcf9e9-4a3e-4e13-963d-1270b94955dc",
   "dni":"77834021"
}

我需要得到:

{
"78081181": "06b6751f-5125-4e48-b588-fcc8ff56004f",
"77834021": "4bdcf9e9-4a3e-4e13-963d-1270b94955dc"
}

有什么想法吗?

如果输入文件完全符合您的记忆,请使用 --slurpreduce:

jq --slurp 'reduce .[] as $k ({}; .[$k.dni] = $k.id)'
{
  "78081181": "06b6751f-5125-4e48-b588-fcc8ff56004f",
  "77834021": "4bdcf9e9-4a3e-4e13-963d-1270b94955dc"
}

Demo

每个对象都可以使用 { (.value) : (.key) } 公式进行转换。使用 -s 将所有对象读取到一个数组中,使用 add.

将所有对象合并为一个
jq  -s '[ .[] | { (.dni) : (.id) } ] | add' doc.json

将内存需求降低到最低限度(至少在 jq 的范围内):

jq -n 'reduce inputs as $in ({}; . + ($in | {(.dni): .id}))' input.jstream