使用JQ从JSON的values数组中逐块提取值并赋值给shell变量
实现方案
方案1:Shell脚本内直接循环赋值使用
如果你要在脚本内部直接使用每个客户的变量,推荐用以下写法,兼容性好且安全:
#!/bin/bash # 替换为你的JSON文件路径 JSON_FILE="your_data.json" # 逐行读取values下的每个子数组元素,赋值给VAR1-VAR4 while IFS=$'\t' read -r VAR1 VAR2 VAR3 VAR4; do # 此处可以直接使用当前客户的四个变量,示例打印 echo "客户姓名:$VAR1" echo "客户邮箱:$VAR2" echo "客户电话:$VAR3" echo "客户城市:$VAR4" echo "===== 分割线 =====" done < <(jq -r '.values[] | @tsv' "$JSON_FILE")
方案2:直接生成Shell赋值语句
如果你需要输出可单独执行的赋值语句(比如导出给其他脚本使用),可以用以下JQ命令:
jq -r '.values[] | "VAR1=\(.[0] | @sh)\nVAR2=\(.[1] | @sh)\nVAR3=\(.[2] | @sh)\nVAR4=\(.[3] | @sh)\n# 以上为当前客户的变量赋值\n"' your_data.json
输出示例:
VAR1='customer1_name' VAR2='customer1@email.com' VAR3='customer1_phone' VAR4='customer1_city' # 以上为当前客户的变量赋值 VAR1='customer2_name' VAR2='customer2@email.com' VAR3='customer2_phone' VAR4='customer2_city' # 以上为当前客户的变量赋值
注意事项
- 代码中使用
@tsv、@sh是JQ内置的安全转义能力,可以自动处理字段中存在的空格、引号、特殊符号,避免Shell赋值语法错误 - 需保证
values下的每个子数组都是固定4个元素,和VAR1-VAR4一一对应,如果字段数量有调整,对应修改变量数量即可
内容的提问来源于stack exchange,提问作者TooNetCreation
相关产品推荐
相关产品推荐

