我有一个问题。 假设我有一个像这样的 json 文档:
{
"counts": [
17,
1014,
22,
9,
11
],
"values": [
"5",
"10",
"15",
"20",
"25"
]
}
我想得到这样的结果:
{
"5":17,
"10":1014,
"15":22,
"20":9,
"25":11
}
基本上,数组元素被分配为一个接一个的键值对。我怎样才能做到这一点?
我尝试了 jq
with_entries(.values = .counts)
和 with_entries(.values[] = .counts[])
但没有成功。
我会将
transpose
与 reduce
一起使用:
[ .counts, .values ] | transpose | reduce .[] as $t ({}; .[$t[1]] = $t[0])
输出:
{
"5": 17,
"10": 1014,
"15": 22,
"20": 9,
"25": 11
}
基于@pmf的回答,这里有一个小小的改进:
. as $in
| reduce (.values|keys[]) as $i (
{};
.[$in.values[$i]] = $in.counts[$i]
)
它避免了一些隐藏在
with_entries
或普通中的中间对象
在 add
之前可见,并直接转到 reduce
,with_entries
和 add
也使用它。