如何用Bash+jq筛选adminLock=1的条目生成指定关联数组
使用jq生成Bash关联数组筛选adminLock=1的域名条目
给定包含域名信息的JSON数据,需要通过Bash的jq工具筛选出adminLock字段值为1的条目,并将这些条目的domainsID作为键、domains作为值,生成符合Bash语法的关联数组。
核心实现命令
如果JSON数据存储在文件domains.json中,执行以下命令即可生成目标关联数组:
declare -A now_array=($(jq -r '.[] | select(.adminLock == 1) | "[\"\(.domainsID)\"]=\"\(.domains)\""' domains.json))
命令各部分解释
declare -A:声明变量now_array为Bash关联数组类型jq -r:以原始字符串格式输出结果(去除JSON自带的引号包裹).[]:遍历JSON数组中的每一个元素select(.adminLock == 1):筛选出adminLock字段值严格等于1的条目"[\"\(.domainsID)\"]=\"\(.domains)\"":生成符合Bash关联数组语法的键值对字符串,通过转义引号确保字段值中的特殊字符不会破坏语法
其他输入场景示例
- JSON数据来自管道输入
cat domains.json | declare -A now_array=($(jq -r '.[] | select(.adminLock == 1) | "[\"\(.domainsID)\"]=\"\(.domains)\""'))
- JSON数据存储在变量中
# 示例JSON数据 json_data='[ {"domainsID":"173652434","domains":"xxx2.com","adminLock":1}, {"domainsID":"173205812","domains":"xxx4.com","adminLock":1}, {"domainsID":"12345","domains":"test.com","adminLock":0} ]' # 生成关联数组 declare -A now_array=($(echo "$json_data" | jq -r '.[] | select(.adminLock == 1) | "[\"\(.domainsID)\"]=\"\(.domains)\""'))
验证结果
执行以下命令可验证关联数组的内容:
# 输出指定键对应的值 echo ${now_array["173652434"]} # 遍历所有键值对 for key in "${!now_array[@]}"; do echo "Key: $key, Value: ${now_array[$key]}" done
内容的提问来源于stack exchange,提问作者study
相关产品推荐
相关产品推荐

