您当前的位置:首页 > IT编程 > python
| C语言 | Java | VB | VC | python | Android | TensorFlow | C++ | oracle | 学术与代码 | cnn卷积神经网络 | gnn | 图像修复 | Keras | 数据集 | Neo4j | 自然语言处理 | 深度学习 | 医学CAD | 医学影像 | 超参数 | pointnet | pytorch | 异常检测 | Transformers | 情感分类 | 知识图谱 |

自学教程:Python3中对json格式数据的分析处理

51自学网 2021-10-30 23:03:58
  python
这篇教程Python3中对json格式数据的分析处理写得很实用,希望能帮到您。

前言

数据已经过修改,以防泄密,请放心阅读
今天同事提出一个需求,要求我修改之前的某脚本,该脚本的作用是获取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"])>>>3print(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格式数据分析内容请搜索51zixue.net以前的文章或继续浏览下面的相关文章希望大家以后多多支持51zixue.net!


Python实现微信表情包炸群功能
K近邻法(KNN)相关知识总结以及如何用python实现
万事OK自学网:51自学网_软件自学网_CAD自学网自学excel、自学PS、自学CAD、自学C语言、自学css3实例,是一个通过网络自主学习工作技能的自学平台,网友喜欢的软件自学网站。