最近,项目遇到Shell脚本中需要解析、修改json字符串的功能,第一反应肯定是使用jq工具
,但前提是项目环境中必须安装了jq工具包,否则无法直接使用jq命令。而实际生产环境中不一定安装了jq工具包,或者客户方不一定让安装这个jq工具包,那还有没有其他方式可以实现这个功能呢?其实除了使用jq工具外,还可以使用awk和sed命令来实现解析、修改json字符串的功能。
一、解析json字符串和数组:
1、解析json字符串:
[root@huai ~]# info='{"username":"Evelyn","id":"306986359","age":23,"city":"Bei Jing"}'
[root@huai ~]# name=$(echo "$info" | awk -F '[:,}]' '{for(i=1;i<=NF;i++) if($i~/username/){print $(i+1)}}' | sed 's/"//g')
[root@huai ~]# echo "$name"
Evelyn
2、解析json数组:
[root@huai ~]# info='[{"username":"Evelyn","id":"306986359","age":23,"city":"Bei Jing"},{"username":"Sophia","id":"306076151","age":25,"city":"Bei Jing"}]'
[root@huai ~]# name=$(echo "$info" | awk -F '[:,}]' '{for(i=1;i<=NF;i++) if($i~/username/){print $(i+1)}}' | sed 's/"//g')
[root@huai ~]# echo "$name"
Evelyn
Sophia
二、修改json字符串
假设有一个json字符串,如下:
[root@huai ~]# json='{"username":"Evelyn","id":"306986359","age":23,"city":"Bei Jing"}'
使用sed命令修改字段 “username” 的值为 “Robert”,并输出修改后的完整json字符串,结果如下:
[root@huai ~]# newJson=$(echo "$json" | sed 's/"username":"[^"]*"/"username":"Robert"/')
[root@huai ~]# echo "$newJson"
{"username":"Robert","id":"306986359","age":23,"city":"Bei Jing"}