使用jq合并多个JSON对象并新增顶层字段的实现方案咨询
jq合并脚本调整方案
1. 修改program.jq脚本
把原有内容替换为:
input as $owners | input as $food | {$owners, $food, animals: [inputs]}
2. 调整执行命令
调整文件传入顺序,把food.json放在第二个参数位,同时过滤排除文件的时候增加food.json的规则:
jq -n -f program.jq owners.json food.json $(ls *.json | grep -v -E 'owners.json|food.json')
实现逻辑
jq的input函数会按照命令行传入文件的顺序依次读取输入:
- 第一个传入的owners.json会被第一个
input读取,赋值给$owners变量作为顶层owners字段值 - 第二个传入的food.json会被第二个
input读取,赋值给$food变量作为顶层food字段值 - 剩余传入的所有动物类JSON文件,会被
inputs批量读取后存入animals数组
如果你的shell支持extglob(bash默认可执行shopt -s extglob开启),也可以用更安全的方式避免ls命令的潜在问题:
jq -n -f program.jq owners.json food.json !(*owners|*food).json
内容的提问来源于stack exchange,提问作者dogman
相关产品推荐
相关产品推荐

