waid 发表于 2018-8-3 12:13:25

Python学习之利用Python处理JSON格式数据

  最近在研究利用zabbix的自动发现功能来监控一台服务器上的多个Redis端口。网上有篇文章写个Python程序来发现Redis端口并显示成JSON格式。这里就学习下Python如何处理JSON格式数据。
  处理JSON,需要用到python的json模块可以用import json导入模块,主要是json.dumps()和json.loads()两个函数。
  参考《Python Cookbook》一书
In : import json                      导入json模块  

  
In : data = {                         定义python数据结构
  
   ...:   'name' : 'ACME',
  
   ...:   'shares' : 100,
  
   ...:   'price': 542.23
  
   ...:      }
  

  
In : json_str = json.dumps(data)      将python数据结构转化成JSON格式
  

  
In : data = json.loads(json_str)      将JSON格式转化为python数据结构
  JSON的编码格式和Python的语法格式相近,除了一些小的地方有所不同,例如Python中的True对应JSON编码格式的true,False对应false,None对应null。
In : json.dumps(False)  
Out: 'false'
  

  
In : d={'a' : True,
  
   ....:    'b' : 'Hello',
  
   ....:    'c' : None}
  

  
In : json.dumps(d)
  
Out: '{"a": true, "c": null, "b": "Hello"}'
  当JSON格式数据层次太深时,很难检查数据,可以利用pprint模块的pprint()函数格式化输出JSON数据
  可以根据key值排序,还可以设置缩进格式,以整洁显示输出结果
In : print(json.dumps(data,sort_keys=True))  
{"name": "ACME", "price": 542.23000000000002, "shares": "100"}
  

  
In : print(json.dumps(data,sort_keys=True,indent=4))
  
{
  
    "name": "ACME",
  
    "price": 542.23000000000002,
  
    "shares": "100"
  
}
  如以下发现Redis端口的Python脚本
#/usr/bin/python  
#This script is used to discovery redis port on the server
  
import subprocess
  
import json          #导入json模块
  
args="netstat -tanp|awk -F':' '/redis-server/&&/LISTEN/{print $2}'|awk '{print $1}'"
  
t=subprocess.Popen(args,shell=True,stdout=subprocess.PIPE).communicate()#通过subprocess.Popen获取redis的端口号
  
ports=[]
  

  
for port in t.split('\n'):
  
    if len(port) != 0:
  
       ports.append({'{#REDISPORT}':port})
  
print json.dumps({'data':ports},indent=4,separators=(',',':'))#将字符串处理成json格式
  输出结果如下:
{  
    "data":[
  
      {
  
            "{#REDISPORT}":"6801"
  
      },
  
      {
  
            "{#REDISPORT}":"6400"
  
      },
  
      {
  
            "{#REDISPORT}":"6501"
  
      },
  
      {
  
            "{#REDISPORT}":"6410"
  
      }
  
    ]
  
}
页: [1]
查看完整版本: Python学习之利用Python处理JSON格式数据