当前位置:   article > 正文

Linux输出json格式_linux 读取json

linux 读取json

情景:zabbix自定义模板,如果设置为自动发现规则,需要有对应的json格式输出让zabbix-server解析。

有两种方式:
一种是纯shell,但是比较复杂
一种是python,比较简单

shell栗子:

[root@tbj ~]# cat nginxport.sh
#!bin/bash
# 注意这种写法
NGINXPORT=(`ss -nltp | grep nginx|awk -F: '{print $2}'|awk '{print $1}'`)
# 要想输入所有端口,用下面的写法
# echo ${NGINXPORT[@]}
length=${#NGINXPORT[@]}
printf "{\n"
printf '\t'"\"port\":["
for ((i=0 ; i<${length} ; i++))
do
        printf '\n\t\t{'
        printf "\"{#NGINXPORTS}\":\"${NGINXPORT[$i]}\"}"
        if [ $i -lt $[${length}-1] ];then
                printf ','
        fi
done
printf  "\n\t]\n"
printf  "}\n"
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

结果如图:
在这里插入图片描述

python栗子

[root@tbj ~]# cat nginxport.py
#!/usr/bin/python3
# encoding: utf-8
import os
import json

# os.popen() 方法用于从一个命令打开一个管道。理解为执行Linux命令
port = os.popen("""ss -nltp | grep nginx|awk -F: '{print $2}'|awk '{print $1}'""")
ports = []
# 提取Linux执行的结果
for i in port.readlines():
    # 去掉port后面的空格
    print(i.strip())
    ports += [{'{#NGINXPORT}': i}]
# 把数据转换为json对象
print(json.dumps({'data': ports}, indent=4, separators=(',', ':'), sort_keys=True))
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

结果如下:

在这里插入图片描述
解析:

# sort_keys:是否按照字典排序(a-z)输出,True代表是,False代表否。
# indent=4:设置缩进格数,一般由于Linux的习惯,这里会设置为4。
# separators:设置分隔符。
# 如果不想后面带有空格输出,那就可以设置成separators=(',', ':'),如果想保持原样,可以写成separators=(', ', ': ')。
# 这几个的顺序,暂时发现没什么影响
  • 1
  • 2
  • 3
  • 4
  • 5
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/article/detail/50222
推荐阅读
相关标签
  

闽ICP备14008679号