如何用Shell脚本从JSON输出中提取Key为Name的Value值?
如何从指定JSON输出中提取Key为"Name"对应的Value值?
首先,你的JSON输入是这样的:
{ "Tags": [ { "ResourceType": "instance", "Value": "dev", "Key": "Group" }, { "ResourceType": "instance", "Value": "web", "Key": "Name" } ] }
推荐方案:使用jq工具(最稳定可靠)
jq是专门用于处理JSON数据的命令行工具,几乎所有类Unix系统都能通过包管理器安装(比如Ubuntu用apt install jq,macOS用brew install jq)。用它提取目标值的命令非常直观:
# 假设你的JSON内容来自文件或者直接输入,这里用echo模拟输入 echo '{ "Tags": [ { "ResourceType": "instance", "Value": "dev", "Key": "Group" }, { "ResourceType": "instance", "Value": "web", "Key": "Name" } ] }' | jq -r '.Tags[] | select(.Key == "Name") | .Value'
这条命令的逻辑很清晰:
.Tags[]:遍历Tags数组中的每一个对象元素select(.Key == "Name"):筛选出Key字段等于"Name"的对象.Value:提取该对象中的Value字段值-r参数:让输出是不带双引号的原始字符串,直接得到"web"
备选方案:用awk临时处理(仅适合固定格式的JSON)
如果暂时没法安装jq,可以用awk做临时提取,但要注意这个方法依赖JSON的格式完全固定(比如字段顺序、空格位置不能变),否则容易出错:
echo '{ "Tags": [ { "ResourceType": "instance", "Value": "dev", "Key": "Group" }, { "ResourceType": "instance", "Value": "web", "Key": "Name" } ] }' | awk -F'"' '/"Key": "Name"/{getline; print $4}'
原理是用双引号做分隔符,先找到包含"Key": "Name"的行,然后读取下一行(也就是包含对应Value的行),提取第4个分隔后的字段。但如果JSON的结构有任何变化,比如Value字段换到Key前面,或者换行位置变了,这个命令就失效了,所以还是优先用jq。
内容的提问来源于stack exchange,提问作者The One
相关产品推荐
相关产品推荐

