Shell解析json

在一些自动化脚本中,有时候会调用一些组件的 RESTful API,这些API返回的数据格式是JSON。这时候就需要用通过shell对JSON进行简单的解析。

下面是一个SHELL下的JSON解析函数,支持JSON数组。

1
2
3
4
jsonval() {
temp=`echo $json | sed 's^\:\ \[{^\:\ \"\"\,^g;s^\:\ {^\:\ \"\"\,^g;s^\:\[{^\:\ \"\"\,^g;s^\:{^\:\ \"\"\,^g'|sed 'y/\{\}\[\]/\ \ \ \ /'|awk -v k="text" '{n=split($0,a,","); for (i=1; i<=n; i++) print a[i]}'|sed 's/\"\:\"/\|/g;s/\"\:\ \"/\|/g;s/\"\:\ /\|/g'|sed 's/\"//g'|grep -w $1|head -1`;
echo ${temp}|awk -F '|' '{print $2}';
}

$json 这个变量是我们需要解析的json串,使用方法为 jsonval KEY;

需要注意的是,这只是一个简单的解析,目前支持JSON数组,仅能解析最细粒度的KEY:VALUE。如果全局唯一的KEY,如果KEY不唯一,则返回第一次出现这个KEY所对应的VALUE。