You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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关联数组语法的键值对字符串,通过转义引号确保字段值中的特殊字符不会破坏语法

其他输入场景示例

  1. JSON数据来自管道输入
cat domains.json | declare -A now_array=($(jq -r '.[] | select(.adminLock == 1) | "[\"\(.domainsID)\"]=\"\(.domains)\""'))
  1. 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 18:05:27