佳木斯湛栽影视文化发展公司

主頁 > 知識(shí)庫 > Python3中對(duì)json格式數(shù)據(jù)的分析處理

Python3中對(duì)json格式數(shù)據(jù)的分析處理

熱門標(biāo)簽:企業(yè)做大做強(qiáng) 語音系統(tǒng) 呼叫中心市場需求 電話運(yùn)營中心 硅谷的囚徒呼叫中心 客戶服務(wù) Win7旗艦版 百度AI接口

前言

數(shù)據(jù)已經(jīng)過修改,以防泄密,請(qǐng)放心閱讀
今天同事提出一個(gè)需求,要求我修改之前的某腳本,該腳本的作用是獲取zabbix監(jiān)控系統(tǒng)返回的json數(shù)據(jù),我的任務(wù)是使其變成易讀的文本,如何獲取數(shù)據(jù)不在此贅述,只描述如何對(duì)json數(shù)據(jù)進(jìn)行處理

一、如何將json數(shù)據(jù)轉(zhuǎn)換成python內(nèi)部的數(shù)據(jù)類型

展示一下zabbix的接口返回的json數(shù)據(jù)(數(shù)據(jù)經(jīng)過dumps編碼了,因?yàn)樵瓟?shù)據(jù)為str類型,只有一行,不易讀)

js = json.dumps(get_alert(), indent=4, ensure_ascii=False)
print(js)
# get_alert()方法為獲取json數(shù)據(jù),編碼后賦給js,打印js,結(jié)果如下:
# indent = 4意為設(shè)置縮進(jìn)為4個(gè)空格,
# ensure_ascii=False參數(shù)是禁用ascii編碼,若不禁用,中文字符會(huì)輸出為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"
}

接下來我們需要對(duì)json對(duì)象進(jìn)行解碼

js_loads_data = json.loads(js)
# 解碼后的數(shù)據(jù)轉(zhuǎn)為python原生的字典類型(dict)

我們需要之后json對(duì)象里面的數(shù)據(jù)類型解碼為dict之后與之對(duì)應(yīng)的數(shù)據(jù)類型、

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

記不住沒有關(guān)系,有方法可以現(xiàn)查:

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

通過type()方法可以查看解碼后數(shù)據(jù)js_loads_data的數(shù)據(jù)類型,發(fā)現(xiàn)他說字典類型,由此知道如何訪問它內(nèi)部的數(shù)據(jù)

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

訪問字典的值直接通過改變量的下標(biāo)訪問即可

同理

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

可以取出result數(shù)組,但是這樣是打印整個(gè)數(shù)組,那么如何取result數(shù)組的里面的值呢?

二、訪問json對(duì)象里嵌套的數(shù)組

我們知道,json對(duì)象轉(zhuǎn)為字典后,數(shù)組對(duì)應(yīng)的類型為列表(list)

所以我們可以通

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

過列表的下標(biāo)來訪問列表的內(nèi)容

print(js_loads_data['result'][0])
# 可以將列表下標(biāo)為0的一個(gè)數(shù)據(jù)取出來
print(type(js_loads_data['result'][0]))
>>>class 'dict'>
# 打印類型發(fā)現(xiàn),列表里面的第一個(gè)元素為字典類型,那么我們又知道了如何訪問該字典里面的數(shù)據(jù):
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)'}]
>>>略
# 依次打印鍵和值,觀察后發(fā)現(xiàn)hosts和items兩個(gè)元素還是列表類型,如要取值還要進(jìn)行處理

btw,分享一個(gè)取出列表所有元素的簡便方法:

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

這樣處理之后js_loads_data[‘result']三個(gè)字典里面的result列表已經(jīng)被我取出來賦值給result_list這個(gè)列表了,現(xiàn)在result_list是列表嵌套列表再嵌套字典的類型(不太好理解,注意觀察上面的json數(shù)據(jù)),這樣使接下來的操作更為簡單

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

處理完成

三、總結(jié)

拿到一個(gè)json不要慌,

先編碼解碼,轉(zhuǎn)成python原生的數(shù)據(jù)類型一步步分析,用print(type(元素))的方法捋清楚每個(gè)元素的類型,明白整個(gè)json串的結(jié)構(gòu)搞明白每個(gè)類型的訪問方法這樣我們就可以對(duì)整個(gè)json數(shù)據(jù)為所欲為了!

到此這篇關(guān)于Python3中對(duì)json格式數(shù)據(jù)的分析處理的文章就介紹到這了,更多相關(guān)Python json格式數(shù)據(jù)分析內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • Python3 json模塊之編碼解碼方法講解
  • Python3自定義json逐層解析器代碼
  • python3實(shí)現(xiàn)從kafka獲取數(shù)據(jù),并解析為json格式,寫入到mysql中
  • python3 實(shí)現(xiàn)的對(duì)象與json相互轉(zhuǎn)換操作示例
  • python3 json數(shù)據(jù)格式的轉(zhuǎn)換(dumps/loads的使用、dict to str/str to dict、json字符串/字典的相互轉(zhuǎn)換)
  • Python3爬蟲爬取百姓網(wǎng)列表并保存為json功能示例【基于request、lxml和json模塊】
  • Python3實(shí)現(xiàn)將本地JSON大數(shù)據(jù)文件寫入MySQL數(shù)據(jù)庫的方法
  • Python3實(shí)現(xiàn)的字典、列表和json對(duì)象互轉(zhuǎn)功能示例
  • 解決python3 json數(shù)據(jù)包含中文的讀寫問題
  • Python3內(nèi)置json模塊編碼解碼方法詳解

標(biāo)簽:安康 山西 山西 喀什 海南 濟(jì)南 崇左 長沙

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Python3中對(duì)json格式數(shù)據(jù)的分析處理》,本文關(guān)鍵詞  ;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話咨詢

    • 400-1100-266
    神池县| 洱源县| 历史| 堆龙德庆县| 清苑县| 岳普湖县| 伊宁市| 小金县| 疏附县| 白城市| 涿鹿县| 婺源县| 年辖:市辖区| 莱西市| 彰化市| 盐城市| 漳浦县| 安阳县| 广汉市| 甘肃省| 景泰县| 永善县| 璧山县| 祁东县| 射阳县| 正定县| 泸定县| 怀集县| 乌海市| 应用必备| 武定县| 老河口市| 临海市| 白朗县| 彰武县| 广州市| 静宁县| 五河县| 保靖县| 合江县| 丹棱县|