如何使用jq将projects数组转换为指定结构的JSON对象
解决JSON数组转键值对象的jq方法
你当前用map得到的是数组结构,要转换成目标对象,只需在map之后追加add操作,把数组中的多个单键对象合并为一个完整对象:
.projects | map({(.): {name: .}}) | add
原理说明
map({(.): {name: .}})会将数组内每个元素转换为{"abc": {"name": "abc"}}这类单键对象,最终生成一个包含多个独立对象的数组。add会把数组里的所有对象合并,由于每个对象的键唯一,合并后就得到你需要的键值对结构。
更简洁的替代写法
也可以用from_entries实现,先将数组元素转为{key, value}格式,再转换为对象:
.projects | map({key: ., value: {name: .}}) | from_entries
示例验证
输入JSON:
{ "otherField": "xxx", "projects": [ "abc", "xyz" ] }
执行上述jq命令后,输出:
{ "abc": { "name": "abc" }, "xyz": { "name": "xyz" } }
内容的提问来源于stack exchange,提问作者puter
相关产品推荐
相关产品推荐

