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

如何在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结构。
    • 纯文本格式:直接循环输出键值对到文件,适合简单场景。

前置依赖

Mac上如果没有jq,可以用Homebrew安装:brew install jq

内容的提问来源于stack exchange,提问作者Murakami

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 00:35:04