不使用jq如何在Shell脚本中读取JSON属性值并赋值给变量
实现方案
以下方法仅适用于你给出的这类**无嵌套、属性值无特殊符号(逗号/双引号/大括号)**的简单JSON结构,不需要额外安装工具,仅用系统自带的sed/awk即可实现。
方法1:使用sed直接处理
步骤1:获取JSON内容
先将curl的返回结果存入变量,示例:
# 替换成你的实际curl请求 json=$(curl https://your-api-address.com/xxx) # 也可以直接用你给出的示例内容测试 # json='[{ "id":3, "start_time" : "x","end_time" : "x","total_time" : "x"}]'
步骤2:输出key=value格式内容
echo "$json" | sed -e 's/^\[//' -e 's/\]$//' -e 's/[{}"]//g' -e 's/,/\n/g' -e 's/ *: */=/g'
执行后直接得到你需要的输出:
id=3 start_time=x end_time=x total_time=x
步骤3:导入变量到当前shell(可选)
如果需要直接在脚本中使用这些变量,可以执行:
source <(echo "$json" | sed -e 's/^\[//' -e 's/\]$//' -e 's/[{}"]//g' -e 's/,/\n/g' -e 's/ *: */=/g')
执行后可以直接调用变量:
echo $id # 输出3 echo $start_time # 输出x
方法2:使用awk处理
如果需要更灵活的匹配逻辑,可以用awk实现:
echo "$json" | awk -F'[:,]' '{ gsub(/[\[\]{}" ]/, "", $0) for(i=1;i<=NF;i+=2) { print $i"="$(i+1) } }'
注意事项
以上方案仅适配简单扁平结构的JSON,如果JSON存在嵌套结构、属性值包含特殊符号的场景,还是建议使用jq工具处理,避免解析错误。
内容的提问来源于stack exchange,提问作者Nagidi Srinivas
相关产品推荐
相关产品推荐

