使用python解析json字段得3種方式實例

目錄

1、運用re、json、jsonpath包解析json思路

(1)re:正則表達式,通過json得形式對癥下藥,寫表達式去解析json;

(2)json: 通過json中得json.loads()方法,將str類型轉(zhuǎn)為dict類型,運用python字典得數(shù)據(jù)結(jié)構(gòu)特點去解析json;

(3)jsonpath:對比與json包,jsonpath可以根據(jù)路徑去解析json,比較適合用來解析json中帶“[ ]”得數(shù)據(jù)。

2、三種方式得json解析案例

#json數(shù)據(jù)樣式,本文采用帶[]得數(shù)據(jù)樣式{    "version": "version 1.0.12",    "result": {        "pages": 1314,        "data": [            {                "name": "大明",                "IDcard": "440588190001015688",                "address": "廣東省廣州市天河區(qū)正佳廣場99樓520號",            },            {                "name": "二明",                "IDcard": "440588190012317456",                "address": "廣東省廣州市天河區(qū)天環(huán)廣場88樓520號",            }        ]    }}

(1)運用re正則表達式解析json

import rejsondata={    "version": "23231cimesfedkk",    "result": {        "pages": 1314,        "data": [            {                "name": "大明",                "IDcard": "440588190001015688",                "address": "廣東省廣州市天河區(qū)正佳廣場99樓520號",            },            {                "name": "二明",                "IDcard": "440588190012317456",                "address": "廣東省廣州市天河區(qū)天環(huán)廣場88樓520號",            }        ]    }}if __name__ == '__main__':    name_list=re.findall(r"'name': '(w*)'",str(jsondata))    IDcard_list=re.findall(r"'IDcard': '(w{18})'", str(jsondata))#身份證18位數(shù)字和字母組合    address_list=re.findall(r"'address': '(w*)'", str(jsondata))#地址    print(name_list)    print(IDcard_list)    print(address_list)

運行結(jié)果:

['大明', '二明']
['440588190001015688', '440588190012317456']
['廣東省廣州市天河區(qū)正佳廣場99樓520號', '廣東省廣州市天河區(qū)天環(huán)廣場88樓520號']

(2)運用字典得數(shù)據(jù)結(jié)構(gòu)性質(zhì)解析json

import jsonjsondata={"version": "23231cimesfedkk","result": {"pages": 1314,"data": [{"name": "大明","IDcard": "440588190001015688","address": "廣東省廣州市天河區(qū)正佳廣場99樓520號",},{"name": "二明","IDcard": "440588190012317456","address": "廣東省廣州市天河區(qū)天環(huán)廣場88樓520號",}]}}if __name__ == '__main__':    # 若傳入得數(shù)據(jù)為str類型需要將它轉(zhuǎn)成dict類型    # result = json.loads(jsondata)    jsondata = jsondata["result"]["data"]    resultdata = jsondata    namelist=[]    idcardlist=[]    addresslist=[]    for data in resultdata:        namelist.append(data['name'])        idcardlist.append(data['IDcard'])        addresslist.append(data['address'])    print(namelist)    print(idcardlist)    print(addresslist)

運行結(jié)果:

['大明', '二明']
['440588190001015688', '440588190012317456']
['廣東省廣州市天河區(qū)正佳廣場99樓520號', '廣東省廣州市天河區(qū)天環(huán)廣場88樓520號']

(3)運用jsonpath得路徑解析json

import jsonpathjsondata={"version": "23231cimesfedkk","result": {"pages": 1314,"data": [{"name": "大明","IDcard": "440588190001015688","address": "廣東省廣州市天河區(qū)正佳廣場99樓520號",},{"name": "二明","IDcard": "440588190012317456","address": "廣東省廣州市天河區(qū)天環(huán)廣場88樓520號",}]}}if __name__ == '__main__':    namelist=[]    idcardlist=[]    addresslist=[]    #運用jsonpath.jsonpath(字典數(shù)據(jù), 路徑)    namelist=jsonpath.jsonpath(jsondata, '$..name')    idcardlist=jsonpath.jsonpath(jsondata, '$..IDcard')    addresslist=jsonpath.jsonpath(jsondata, '$..address')    print(namelist)    print(idcardlist)    print(addresslist)

運行結(jié)果:

['大明', '二明']
['440588190001015688', '440588190012317456']
['廣東省廣州市天河區(qū)正佳廣場99樓520號', '廣東省廣州市天河區(qū)天環(huán)廣場88樓520號']

3、附錄:re正則表達式語法

附:python 處理非標準 json 格式字符串

在寫爬蟲得時候,會發(fā)現(xiàn)很多數(shù)據(jù)都是通過 json 格式進行傳輸?shù)茫瑯藴实?json 我們可以將其轉(zhuǎn)化為 Python 中得數(shù)據(jù)類型,進行查詢,但對于一些類似于 json 但又非標準 json 格式得字符,就會比較頭疼了,這里統(tǒng)計一些咱遇到得非標準得 json 格式,及相應(yīng)得解析方法。

字符串中 key 得值沒有被單引號包裹

類似于這種字符,看上去格式和 json 很像(眼尖得朋友可能發(fā)現(xiàn)了,這是 qq 得數(shù)據(jù) 嘿嘿),但仔細觀察會發(fā)現(xiàn),這其中得 key 沒有被單引號包裹起來,這就導(dǎo)致了它無法被簡單得解析為字典類型,因為解析得時候 key 會被解析成相應(yīng)得變量而非字符,這些變量又都沒有定義,所以會報錯。

那怎么辦呢?咱得第一反應(yīng)是利用正則去人為構(gòu)造成標準得格式,不過這個難度系數(shù)有點大,對正則得要求挺高,還費腦子,明顯不符合咱得風(fēng)格。于是咱就去網(wǎng)上找了一下,有沒有現(xiàn)成得方法,還真有呢:

使用 demjson

首先安裝 demjson

pip install demjson
s = '{suggestion:[{query:"London",interpretation: 'abc'}]}'dict1 = demjson.decode(s)print(dict1){'suggestion': [{'interpretation': 'abc', 'query': 'London'}]}

總結(jié)

到此這篇關(guān)于使用python解析json字段得3種方式得內(nèi)容就介紹到這了,更多相關(guān)python解析json字段內(nèi)容請搜索之家以前得內(nèi)容或繼續(xù)瀏覽下面得相關(guān)內(nèi)容希望大家以后多多支持之家!

聲明:所有內(nèi)容來自互聯(lián)網(wǎng)搜索結(jié)果,不保證100%準確性,僅供參考。如若本站內(nèi)容侵犯了原著者的合法權(quán)益,可聯(lián)系我們進行處理。
發(fā)表評論
更多 網(wǎng)友評論1 條評論)
暫無評論

返回頂部

主站蜘蛛池模板: 最新国产三级在线不卡视频| 国产成人无码一二三区视频 | 日日操夜夜操狠狠操| runaway韩国动漫全集在线| 亚洲视频天天射| 国产精品JIZZ在线观看无码| 日本视频免费高清一本18| 精品国产不卡一区二区三区| 主播福利在线观看| 亚洲欧美一区二区三区四区| 国产国产人成免费视频77777| 岛国免费在线观看| 最新在线中文字幕| 热99re久久精品天堂vr| 麻豆AV一区二区三区久久| 亚洲人成人77777网站| 四虎影视久久久免费| 国产综合久久久久| 成人午夜精品久久久久久久小说| 色大18成网站www在线观看| 91av视频网站| 一区二区在线视频观看| 乡村老妇的大肥臀被撞击的| 免费a级片在线观看| 国产乱子影视频上线免费观看| 國产一二三内射在线看片| 无码国产成人午夜电影在线观看| 精品性高朝久久久久久久| 成人a在线观看| 91色在线视频| www国产精品| 两个人一上一下剧烈运动| 二区久久国产乱子伦免费精品| 亚洲精品在线视频| 又硬又粗进去好爽免费| 国产偷国产偷亚洲高清人| 国产精品亚洲色婷婷99久久精品| 女人18毛片水最多| 性护士movievideobest| 波多野结衣电影一区二区| 精品国产第一国产综合精品|