如何在Bash中实现每次迭代处理最多20个JSON参数
批量处理JSON数组参数优化方案
核心思路
用专业JSON工具jq处理数组分组与格式生成,避免原生Bash解析JSON的风险,同时实现每20个元素批量执行命令。
最优解决方案(依赖jq 1.6+)
利用jq内置的_nwise(n)函数直接将数组拆分为每n个元素的子数组,自动处理分组与格式:
#!/bin/bash # 读取list.json,按每20个元素分组,批量执行命令 jq -c '_nwise(20)' list.json | while read -r params_group; do command --params="$params_group" done
说明:
jq -c '_nwise(20)':将原JSON数组拆分为每20个元素的紧凑格式JSON子数组,自动处理最后一组不足20个的情况(如127个元素最后一组为7个)- 每个
params_group都是合法的JSON数组,无多余尾逗号,直接符合--params的格式要求 - 127个元素仅需执行7次命令,效率比原逐个处理提升18倍以上
兼容旧版jq的方案(jq <1.6)
如果你的jq版本没有_nwise函数,可通过数组切片实现分组:
#!/bin/bash batch_size=20 # 获取数组总元素数 total_items=$(jq '. | length' list.json) # 循环分组处理 for ((start=0; start < total_items; start+=batch_size)); do # 提取从start到start+batch_size的子数组 params_group=$(jq --argjson s "$start" --argjson b "$batch_size" '.[$s:$s+$b]' list.json) command --params="$params_group" done
说明:
jq '.[$s:$s+$b]':JSON数组切片操作,自动处理超出数组长度的情况,最后一组自动截断为剩余元素--argjson用于传递数值参数,避免字符串转义问题
为什么不推荐原生Bash解析JSON?
原生Bash的字符串拆分逻辑无法处理JSON中带空格、特殊字符的元素,容易出现格式错误(如丢失引号、多余逗号),而jq作为专业JSON工具,能保证生成的参数格式完全合法。
内容的提问来源于stack exchange,提问作者divedivedive
相关产品推荐
相关产品推荐

