shell脚本解析json文件

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文件中有子节点、孙节点都可以操作以上方式递归实现,如有不懂的可私信。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值