如何使用jq重命名JSON对象键并实现批量前缀查询?
解决jq键名添加前缀的问题
你需要将原JSON对象的每个键名加上user.前缀,重新生成新的对象,对应的jq命令如下:
cat file.txt | jq 'to_entries | map(.key = "user.\(.key)") | from_entries'
执行后会得到你想要的结果:
{ "user.user1": 10, "user.joe": 13, "user.jane": 55 }
命令拆解说明:
to_entries:把原JSON对象转换成[{"key":"user1","value":10}, ...]格式的键值对数组map(.key = "user.\(.key)"):遍历数组中的每个元素,将key字段的值替换为user.拼接原键名的新字符串from_entries:把修改后的键值对数组重新转换回标准JSON对象
你之前的命令问题:
你用[.]| to_entries[]|.[$k] = $v的写法,是把整个原对象当作单个值,修改了外层键名为user,最终得到嵌套结构,而非给每个原键添加前缀,自然无法满足按user.*查询的需求。
内容的提问来源于stack exchange,提问作者stickyIcky
相关产品推荐
相关产品推荐

