Python3中对json格式数据的分析处理


Posted in Python onJanuary 28, 2021

前言

数据已经过修改,以防泄密,请放心阅读
今天同事提出一个需求,要求我修改之前的某脚本,该脚本的作用是获取zabbix监控系统返回的json数据,我的任务是使其变成易读的文本,如何获取数据不在此赘述,只描述如何对json数据进行处理

一、如何将json数据转换成python内部的数据类型

展示一下zabbix的接口返回的json数据(数据经过dumps编码了,因为原数据为str类型,只有一行,不易读)

js = json.dumps(get_alert(), indent=4, ensure_ascii=False)
print(js)
# get_alert()方法为获取json数据,编码后赋给js,打印js,结果如下:
# indent = 4意为设置缩进为4个空格,
# ensure_ascii=False参数是禁用ascii编码,若不禁用,中文字符会输出为ASCII码
{
 "jsonrpc": "2.0",
 "result": [
  {
   "triggerid": "123456",
   "expression": "{23567}>95",
   "description": "High memory utilization > 95",
   "url": "",
   "status": "0",
   "value": "1",
   "priority": "4",
   "lastchange": "123456",
   "comments": "",
   "error": "",
   "templateid": "0",
   "type": "0",
   "state": "0",
   "flags": "0",
   "recovery_mode": "0",
   "recovery_expression": "",
   "correlation_mode": "0",
   "correlation_tag": "",
   "manual_close": "0",
   "opdata": "",
   "hosts": [
    {
     "hostid": "8888",
     "name": "window_sever"
    }
   ],
   "items": [
    {
     "itemid": "123456",
     "name": "Memory utilization",
     "description": "Memory used percentage is calculated as (100-pavailable)"
    }
   ]
  },
  {
   "triggerid": "17099",
   "expression": "{20221}<{$SWAP.PFREE.MIN.WARN} and {20222}>0",
   "description": "High swap space usage ( less than 20% free)",
   "url": "",
   "status": "0",
   "value": "1",
   "priority": "2",
   "lastchange": "123456789",
   "comments": "This trigger is ignored, if there is no swap configured",
   "error": "",
   "templateid": "16176",
   "type": "0",
   "state": "0",
   "flags": "0",
   "recovery_mode": "0",
   "recovery_expression": "",
   "correlation_mode": "0",
   "correlation_tag": "",
   "manual_close": "0",
   "opdata": "Free: {ITEM.LASTVALUE1}, total: {ITEM.LASTVALUE2}",
   "hosts": [
    {
     "hostid": "10325",
     "name": "linus"
    }
   ],
   "items": [
    {
     "itemid": "31681",
     "name": "Free swap space in %",
     "description": ""
    },
    {
     "itemid": "123456",
     "name": "Total swap space",
     "description": ""
    }
   ]
  }
 ],
 "id": "3"
}

接下来我们需要对json对象进行解码

js_loads_data = json.loads(js)
# 解码后的数据转为python原生的字典类型(dict)

我们需要之后json对象里面的数据类型解码为dict之后与之对应的数据类型、

json python
object dict
array list
string str
number (int) int
number (real) float
true True
false False
null None

记不住没有关系,有方法可以现查:

print(type(js_loads_data))
>>><class 'dict'>

通过type()方法可以查看解码后数据js_loads_data的数据类型,发现他说字典类型,由此知道如何访问它内部的数据

print(js_loads_data["id"])
>>>3
print(type(js_loads_data["id"]))
>>><class 'str'>

访问字典的值直接通过改变量的下标访问即可

同理

print(type(js_loads_data["result"]))

可以取出result数组,但是这样是打印整个数组,那么如何取result数组的里面的值呢?

二、访问json对象里嵌套的数组

我们知道,json对象转为字典后,数组对应的类型为列表(list)

所以我们可以通

print(type(js_loads_data["result"]))
>>><class 'list'>

过列表的下标来访问列表的内容

print(js_loads_data['result'][0])
# 可以将列表下标为0的一个数据取出来
print(type(js_loads_data['result'][0]))
>>><class 'dict'>
# 打印类型发现,列表里面的第一个元素为字典类型,那么我们又知道了如何访问该字典里面的数据:
for key in js_loads_data['result'][0]:
 print(key, ":", js_loads_data['result'][0][key])
>>>略
>>>hosts : [{'hostid': '10358', 'name': 'FTPC01(192.168.19.5)'}]
>>>items : [{'itemid': '33152', 'name': 'Memory utilization', 'description': 'Memory used percentage is calculated as (100-pavailable)'}]
>>>略
# 依次打印键和值,观察后发现hosts和items两个元素还是列表类型,如要取值还要进行处理

btw,分享一个取出列表所有元素的简便方法:

result_list= [(item.get('hosts', 'NA')) for item in js_loads_data['result']]

这样处理之后js_loads_data[‘result']三个字典里面的result列表已经被我取出来赋值给result_list这个列表了,现在result_list是列表嵌套列表再嵌套字典的类型(不太好理解,注意观察上面的json数据),这样使接下来的操作更为简单

for tmp in result_list:
 print(tmp[0].get('name'))
>>>windows sever
>>>linus

处理完成

三、总结

拿到一个json不要慌,

先编码解码,转成python原生的数据类型一步步分析,用print(type(元素))的方法捋清楚每个元素的类型,明白整个json串的结构搞明白每个类型的访问方法这样我们就可以对整个json数据为所欲为了!

到此这篇关于Python3中对json格式数据的分析处理的文章就介绍到这了,更多相关Python json格式数据分析内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
更改Python命令行交互提示符的方法
Jan 14 Python
Python开发中爬虫使用代理proxy抓取网页的方法示例
Sep 26 Python
Python环境搭建之OpenCV的步骤方法
Oct 20 Python
mac系统安装Python3初体验
Jan 02 Python
Python中的二维数组实例(list与numpy.array)
Apr 13 Python
利用Python在一个文件的头部插入数据的实例
May 02 Python
python查找指定文件夹下所有文件并按修改时间倒序排列的方法
Oct 21 Python
python实现维吉尼亚加密法
Mar 20 Python
树莓派实现移动拍照
Jun 22 Python
解决pytorch GPU 计算过程中出现内存耗尽的问题
Aug 19 Python
python访问hdfs的操作
Jun 06 Python
教你如何使用Python实现二叉树结构及三种遍历
Jun 18 Python
Python实现微信表情包炸群功能
Jan 28 #Python
Python基于opencv的简单图像轮廓形状识别(全网最简单最少代码)
Jan 28 #Python
python如何构建mock接口服务
Jan 28 #Python
pytest fixtures装饰器的使用和如何控制用例的执行顺序
Jan 28 #Python
如何用tempfile库创建python进程中的临时文件
Jan 28 #Python
python基于Kivy写一个图形桌面时钟程序
Jan 28 #Python
python+opencv3.4.0 实现HOG+SVM行人检测的示例代码
Jan 28 #Python
You might like
用PHP调用Oracle存储过程的方法
2008/09/12 PHP
IP138 IP地址查询小偷实现代码
2010/02/15 PHP
php自定义函数call_user_func和call_user_func_array详解
2011/07/14 PHP
php获得文件大小和文件创建时间的方法
2015/03/13 PHP
推荐dojo学习笔记
2007/03/24 Javascript
jQuery事件用法实例汇总
2014/08/29 Javascript
JS实现简易图片轮播效果的方法
2015/03/25 Javascript
纯js模拟div层弹性运动的方法
2015/07/27 Javascript
超详细的javascript数组方法汇总
2015/11/21 Javascript
微信小程序开发之实现选项卡(窗口顶部TabBar)页面切换
2016/11/25 Javascript
js实现获取鼠标当前的位置
2016/12/14 Javascript
用纯Node.JS弹出Windows系统消息提示框实例(MessageBox)
2017/05/17 Javascript
通过 JS 判断页面是否有滚动条的实现方法
2018/04/05 Javascript
Vue.js获取被选择的option的value和text值方法
2018/08/24 Javascript
微信小程序实现多个按钮的颜色状态转换
2019/02/15 Javascript
Vue render函数实战之实现tabs选项卡组件
2019/04/22 Javascript
[00:09]DOTA2全国高校联赛 精彩活动引爆全场
2018/05/30 DOTA
python判断windows隐藏文件的方法
2014/03/21 Python
基于Python实现通过微信搜索功能查看谁把你删除了
2016/01/27 Python
python的pdb调试命令的命令整理及实例
2017/07/12 Python
Python中pandas dataframe删除一行或一列:drop函数详解
2018/07/03 Python
对pycharm代码整体左移和右移缩进快捷键的介绍
2018/07/16 Python
浅谈Django的缓存机制
2018/08/23 Python
不知道这5种下划线的含义,你就不算真的会Python!
2018/10/09 Python
浅谈python中get pass用法
2019/03/19 Python
对django layer弹窗组件的使用详解
2019/08/31 Python
Python列表嵌套常见坑点及解决方案
2020/09/30 Python
python 合并多个excel中同名的sheet
2021/01/22 Python
详解通过HTML5 Canvas实现图片的平移及旋转变化的方法
2016/03/22 HTML / CSS
Mistine官方海外旗舰店:泰国国民彩妆品牌
2016/12/28 全球购物
SportsDirect.com新加坡:英国第一体育零售商
2019/03/30 全球购物
香港中原电器网上商店:Chung Yuen
2019/06/26 全球购物
违反课堂纪律检讨书
2014/01/19 职场文书
大学生毕业评语
2014/12/31 职场文书
MySQL创建定时任务
2022/01/22 MySQL
Mysql中mvcc各场景理解应用
2022/08/05 MySQL