如何使用JQ将对象数组转换为键值对对象?
使用JQ将对象数组转换为键值对对象
给定输入JSON:
[ { "name": "foo", "id": "123" }, { "name": "bar", "id": "456" } ]
期望得到以name为键、id为值的键值对对象:
{ "foo": "123", "bar": "456" }
这里提供两种简洁的JQ实现方式:
方法一:使用map + from_entries
这是最直观的实现方式,先将数组元素转换为标准key-value结构,再生成目标对象:
jq 'map({key: .name, value: .id}) | from_entries' input.json
map({key: .name, value: .id}):遍历数组,把每个对象映射成包含key(对应原对象name字段)和value(对应原对象id字段)的新对象数组。from_entries:JQ内置函数,专门将[{key:..., value:...}, ...]格式的数组转换为键值对对象。
方法二:使用reduce迭代构建
适合需要自定义逻辑的场景,通过迭代数组元素逐步构建目标对象:
jq 'reduce .[] as $item ({}; .[$item.name] = $item.id)' input.json
reduce .[] as $item ({}; ...):以空对象{}为初始值,遍历数组中的每个元素$item。.[$item.name] = $item.id:每次迭代时,给当前对象添加一个新的键值对,键为$item.name,值为$item.id,最终合并成目标结构。
内容的提问来源于stack exchange,提问作者user1822391
相关产品推荐
相关产品推荐

