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"
}
有什么想法吗?
如果输入文件完全符合您的记忆,请使用 --slurp
和 reduce
:
jq --slurp 'reduce .[] as $k ({}; .[$k.dni] = $k.id)'
{
"78081181": "06b6751f-5125-4e48-b588-fcc8ff56004f",
"77834021": "4bdcf9e9-4a3e-4e13-963d-1270b94955dc"
}
每个对象都可以使用 { (.value) : (.key) }
公式进行转换。使用 -s
将所有对象读取到一个数组中,使用 add
.
将所有对象合并为一个
jq -s '[ .[] | { (.dni) : (.id) } ] | add' doc.json
将内存需求降低到最低限度(至少在 jq 的范围内):
jq -n 'reduce inputs as $in ({}; . + ($in | {(.dni): .id}))' input.jstream
这是我的文档:
{
"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"
}
有什么想法吗?
如果输入文件完全符合您的记忆,请使用 --slurp
和 reduce
:
jq --slurp 'reduce .[] as $k ({}; .[$k.dni] = $k.id)'
{
"78081181": "06b6751f-5125-4e48-b588-fcc8ff56004f",
"77834021": "4bdcf9e9-4a3e-4e13-963d-1270b94955dc"
}
每个对象都可以使用 { (.value) : (.key) }
公式进行转换。使用 -s
将所有对象读取到一个数组中,使用 add
.
jq -s '[ .[] | { (.dni) : (.id) } ] | add' doc.json
将内存需求降低到最低限度(至少在 jq 的范围内):
jq -n 'reduce inputs as $in ({}; . + ($in | {(.dni): .id}))' input.jstream