如何用jq将含任意键的嵌套JSON对象转换为键值对象数组?
用jq转换嵌套JSON为指定数组的解决方案
刚好做过类似的处理,用jq的两个核心函数就能完美解决你的需求!
核心命令
直接执行这条jq命令就能得到你想要的输出:
to_entries | map({name: .key} + .value)
分步解释
咱们拆解一下这个命令的作用:
to_entries:把原始的顶层JSON对象转换成由key和value组成的条目数组。拿你的示例输入来说,执行这一步后会变成:[ {"key": "albert", "value": {"age": 35}}, {"key": "sarah", "value": {"age": 33}}, {"key": "otto", "value": {"age": 27}} ]map({name: .key} + .value):遍历上面的条目数组,对每个元素做两个操作:- 把原来的
key(也就是人名)封装成{name: .key}对象 - 用
+符号把这个新对象和原来的value(包含age的对象)合并,最终得到每个包含name和age的完整对象
- 把原来的
完整测试示例
假设你的JSON数据保存在input.json文件中,执行以下bash命令:
jq 'to_entries | map({name: .key} + .value)' input.json
输出结果就是你期望的数组:
[ {"name":"albert","age":35}, {"name":"sarah","age":33}, {"name":"otto","age":27} ]
内容的提问来源于stack exchange,提问作者Bernd Broermann
相关产品推荐
相关产品推荐

