前言
数据已经过修改,以防泄密,请放心阅读
今天同事提出一个需求,要求我修改之前的某脚本,该脚本的作用是获取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之后与之对应的数据类型、
记不住没有关系,有方法可以现查:
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数据为所欲为了!
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。
更新动态
- 凤飞飞《我们的主题曲》飞跃制作[正版原抓WAV+CUE]
- 刘嘉亮《亮情歌2》[WAV+CUE][1G]
- 红馆40·谭咏麟《歌者恋歌浓情30年演唱会》3CD[低速原抓WAV+CUE][1.8G]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[320K/MP3][193.25MB]
- 【轻音乐】曼托凡尼乐团《精选辑》2CD.1998[FLAC+CUE整轨]
- 邝美云《心中有爱》1989年香港DMIJP版1MTO东芝首版[WAV+CUE]
- 群星《情叹-发烧女声DSD》天籁女声发烧碟[WAV+CUE]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[FLAC/分轨][748.03MB]
- 理想混蛋《Origin Sessions》[320K/MP3][37.47MB]
- 公馆青少年《我其实一点都不酷》[320K/MP3][78.78MB]
- 群星《情叹-发烧男声DSD》最值得珍藏的完美男声[WAV+CUE]
- 群星《国韵飘香·贵妃醉酒HQCD黑胶王》2CD[WAV]
- 卫兰《DAUGHTER》【低速原抓WAV+CUE】
- 公馆青少年《我其实一点都不酷》[FLAC/分轨][398.22MB]
- ZWEI《迟暮的花 (Explicit)》[320K/MP3][57.16MB]