如何在Mac的ZSH脚本中遍历JSON数组并收集用户输入至文件
ZSH脚本实现从JSON数组提取Key并收集对应值保存到文件
完整脚本示例
#!/usr/bin/env zsh # 1. 从目标JSON文件提取数组(替换为你的jq查询,比如数组在`.settings.keys`下就用'.settings.keys[]') keys=($(jq -r '.[]' input.json)) # 2. 初始化关联数组存储键值对 declare -A key_values # 3. 循环遍历每个Key,询问用户输入对应值 for key in "${keys[@]}"; do echo -n "请输入${key}对应的值: " read -r value # -r 避免转义输入中的特殊字符 key_values[$key]="$value" done # 4. 保存结果到文件(两种方式选其一) # 方式一:保存为JSON格式 jq -n --argjson data "$(printf '%s\n' "${(@kv)key_values}" | jq -R . | jq -s 'reduce .[] as $i ({}; .[$i[0]] = $i[1])')" '$data' > output.json # 方式二:保存为纯文本键值对(每行key=value) # for key in "${(@k)key_values}"; do # echo "${key}=${key_values[$key]}" >> output.txt # done
关键部分说明
- 提取JSON数组:
jq -r '.[]' input.json会把JSON数组的每个元素转为纯文本,再通过keys=($(...))转为ZSH数组。如果数组嵌套在JSON的某个字段下,比如{"config": {"keys": ["key1", "key2"]}},就把jq命令改成jq -r '.config.keys[]' input.json。 - 关联数组存储:
declare -A key_values创建关联数组,方便以Key为索引存储对应值。 - 处理用户输入:
read -r value中的-r参数可以保留输入中的反斜杠等特殊字符,避免被ZSH转义。 - 保存结果:
- JSON格式:通过ZSH的
${(@kv)key_values}展开关联数组的键值对,再用jq组装成标准JSON结构。 - 纯文本格式:直接循环输出键值对到文件,适合简单场景。
- JSON格式:通过ZSH的
前置依赖
Mac上如果没有jq,可以用Homebrew安装:brew install jq
内容的提问来源于stack exchange,提问作者Murakami
相关产品推荐
相关产品推荐

