1.需要解析的json文件
{
"fileInfo": {
"enable": "remain",
"filelists": [
{
"fileName": "/home/tester/file_list/hellotest32000s22",
"size": "998KB"
},
{
"fileName": "/home/tester/file_list/hellotest32000s23",
"size": "992KB"
},
{
"fileName": "/home/worker/getDeviceInfo",
"size": "1056KB"
},
{
"fileName": "/home/worker/hostInfo",
"size": "4331KB"
}
]
},
"templateName": "主机名:[TESTHOST]-FILE",
"templateDesc": "主机名:[TESTHOST]"
}
2.解析的脚本(核心)
#!/bin/bash
json_file=$1
json_contents=`cat $json_file`
first_json_tag=$(echo $json_contents | jq -r '.fileInfo | .filelists[]')
#先将文件中的换行替换掉
first_json_tag=`echo $first_json_tag | sed -e 's/\n/" "/g'`
#echo "first_json_tag:$first_json_tag"
OLD_IFS="$IFS"
IFS="}"
#以"}"方式分割,组成数组
all=($first_json_tag)
for one in ${all[*]}
do
#恢复原始的方式
IFS="$OLD_IFS"
#将上面"}"分割后,导致没有"}",重新补上"}"
one=`echo $one"}"`
echo "one:$one"
#重新组装json
one_file_tag=`echo "$one" | jq .`
#获取组装后的json属性
file_name=`echo $one_file_tag | jq -r '.fileName'`
size=`echo $one_file_tag | jq -r '.size'`
echo "filename:$file_name size:$size"
#重新以"}"方式分割,遍历数组
IFS="}"
done
#恢复
IFS="$OLD_IFS"
3解析的结果
one:{ "fileName": "/home/tester/file_list/hellotest32000s22", "size": "998KB" }
filename:/home/tester/file_list/hellotest32000s22 size:998KB
one:{ "fileName": "/home/tester/file_list/hellotest32000s23", "size": "992KB" }
filename:/home/tester/file_list/hellotest32000s23 size:992KB
one:{ "fileName": "/home/worker/getDeviceInfo", "size": "1056KB" }
filename:/home/worker/getDeviceInfo size:1056KB
one:{ "fileName": "/home/worker/hostInfo", "size": "4331KB" }
filename:/home/worker/hostInfo size:4331KB
4.后续
关于json文件中有子节点、孙节点都可以操作以上方式递归实现,如有不懂的可私信。