如何使用jq为JSON数组对象添加来自脚本的size字段值
用jq将脚本输出的数值批量更新到JSON数组中
现有原始JSON数组:
[ { "id": "1" }, { "id": "2" }, { "id": "3" } ]
执行sizes.sh脚本后得到每行一个数值的输出:
10 20 30
要把这些数值依次作为size字段添加到JSON数组的对应对象中,最终得到如下结构:
[ { "id": "1", "size": 10 }, { "id": "2", "size": 20 }, { "id": "3", "size": 30 } ]
解决方案
可以用以下命令实现:
./sizes.sh | jq -n --argfile json original.json ' $json as $arr | [inputs] | map(tonumber) as $sizes | $arr | zip($sizes) | map(.[0] + {size: .[1]}) '
命令说明
./sizes.sh |:将脚本的输出内容传递给jq处理-n:让jq不自动读取标准输入,而是通过inputs手动捕获脚本输出--argfile json original.json:把原始JSON文件加载到变量$arr中[inputs] | map(tonumber) as $sizes:将脚本输出的每行文本转换为数值,组成一个数值数组$arr | zip($sizes):将原始JSON数组和数值数组按索引位置一一配对map(.[0] + {size: .[1]}):给每个原始JSON对象添加对应的size字段,最终组合成目标数组
注意事项
- 确保
sizes.sh输出的行数和原始JSON数组的元素数量完全一致,否则会出现字段缺失或值为null的情况 - 若需要
size字段保留字符串类型,可去掉map(tonumber)部分
内容的提问来源于stack exchange,提问作者Dima
相关产品推荐
相关产品推荐

