python作為一種比較常見的編程語言,其應(yīng)用的范圍還是比較的廣泛的,主要講解的內(nèi)容是如何使用python提取JSON數(shù)據(jù)指定內(nèi)容,需要我們好好的去進(jìn)行一個實(shí)操。那么,怎么樣快速的才能夠上手這項(xiàng)技能呢?下面小編給大家詳細(xì)解答下。
如何提取JSON數(shù)據(jù)指定內(nèi)容
假設(shè)我們要獲取'pic_str'里的數(shù)據(jù)
JSON數(shù)據(jù)
{'err_no':0,'err_str':'OK','pic_id':'1169213517976400008','pic_str':'xoet','md5':'ca9bc4fda521498d2b3aba5dbb4ee4ac'}
1、JSON數(shù)據(jù)為字符串類型
import json str="{'err_no':0,'err_str':'OK','pic_id':'1169213517976400008','pic_str':'xoet','md5':'ca9bc4fda521498d2b3aba5dbb4ee4ac'}" json_str=str.replace("'",'"') #json.loads(),要求json串格式中必須的雙引號??!轉(zhuǎn)換為字典 json_dict=json.loads(dict2) print(json_dict['pic_str']) >>xoet
2、JSON數(shù)據(jù)為字典類型
import json json_dict={'err_no':0,'err_str':'OK','pic_id':'1169213517976400008','pic_str':'xoet','md5':'ca9bc4fda521498d2b3aba5dbb4ee4ac'} #方法一 print(json_dict['pic_str']) #或者使用print(json_dict.get('pic_str')) #方法二:遍歷 for pic in json_dict['pic_str'}: print(pic)
如何提取復(fù)雜JSON的數(shù)據(jù)
在越來越多的項(xiàng)目中,基本都用了json作為接口數(shù)據(jù)返回的格式。json給我們的感覺就是通俗易懂,只是即使再復(fù)雜的結(jié)構(gòu)也會比其他格式容易看。然而一旦在調(diào)試或者測試中需要用到提取某一部分字段數(shù)據(jù)進(jìn)行解析并校驗(yàn)的話,就沒那么容易了。這篇文章使用python簡單地獲取到復(fù)雜json數(shù)據(jù)中的字段信息。
例子
如果有一個接口返回的json信息如下:
{ "familyName":"thinker family", "homeTown":"廣東省", "formed":2016, "secretBase":"Super city", "active":true, "familyMembers":[ { "name":"Jobs", "age":35, "secretIdentity":"1992238132345", "powers":[ "Radiation resistance", "Turning tiny", "Radiation blast" ] }, { "name":"James", "age":37, "secretIdentity":"8839394098124", "powers":[ "Million tonne punch", "Damage resistance", "Superhuman reflexes" ] } ] }
這里就包含了對象,以及列表數(shù)據(jù)。對象中也包含列表數(shù)據(jù)。這應(yīng)該是最基本的企業(yè)接口json格式了。
假如你要提取json中的name信息,最簡單的方式就是
member=[members.get('name')for members in data.get('familyMembers')]
如果是要連續(xù)拿其他的信息,那么就需要換其他中獲取方式,其實(shí)這種是比較麻煩的一種方法。
解決方法
extract_element_from_json(data,["familyMembers","name"]) >>['Jobs','James']
此函數(shù)根據(jù)path中指定的鍵嵌套到obj中的記錄中以檢索所需的信息。當(dāng)遇到一個列表作為path中鍵的值時,此函數(shù)會拆分并以深度優(yōu)先的方式繼續(xù)嵌套在遇到的列表的每個元素上。這就是返回['Jobs','James']的方式;因?yàn)閒amilyMembers的值是一個列表,所以嵌套在它的兩個元素上被拆分,并且name的每個值都附加到輸出列表中。
如果obj是單個字典/json,則此函數(shù)返回包含所需信息的列表,如果obj是字典/json列表,則此函數(shù)返回包含所需信息的雙重列表。
如果嵌套字典/json的相應(yīng)級別缺少path的元素,則此函數(shù)返回[None]。
完整代碼如下:
def extract_element_from_json(obj,path): ''' 輸入關(guān)鍵字,就可以將關(guān)鍵字的值信息存放在列表中并輸出 如果關(guān)鍵字是對象名,則返回的對象字典信息到列表中 如果關(guān)鍵字是列表名,則返回的列表信息到列表中(返回雙重列表) ''' def extract(obj,path,ind,arr): ''' 從一個嵌套的字典中提取一個元素,并返回到列表中。 params:obj-dict-輸入字典 params:path-list-構(gòu)成JSON路徑的字符串列表 params:ind-int-起始索引 params:arr-列表-輸出列表 ''' key=path[ind] if ind+1<len(path): if isinstance(obj,dict): if key in obj.keys(): extract(obj.get(key),path,ind+1,arr) else: arr.append(None) elif isinstance(obj,list): if not obj: arr.append(None) else: for item in obj: extract(item,path,ind,arr) else: arr.append(None) if ind+1==len(path): if isinstance(obj,list): if not obj: arr.append(None) else: for item in obj: arr.append(item.get(key,None)) elif isinstance(obj,dict): arr.append(obj.get(key,None)) else: arr.append(None) return arr if isinstance(obj,dict): return extract(obj,path,0,[]) elif isinstance(obj,list): outer_arr=[] for item in obj: outer_arr.append(extract(item,path,0,[])) return outer_arr
這段代碼可以直接復(fù)制使用。
其中使用方法很簡單如下:
extract_element_from_json(data,["familyMembers","name"])
api提取元素
import requests url="http://ip-api.com/json" response=requests.request("GET",url) data=response.json() extract_element_from_json(data,["status"])
就是這么簡單地使用了。
應(yīng)用場景
通過這樣的方式可以在什么場景下使用呢?
接口重構(gòu),需要校驗(yàn)接口中的部分字段數(shù)據(jù)
接口新增字段,只針對新增的字段進(jìn)行提取校驗(yàn)
需要提取某一部分字段進(jìn)行數(shù)據(jù)傳遞
這篇文章就給大家介紹到這里了,希望可以給大家?guī)韼椭?/p>
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/128294.html
摘要:如下運(yùn)行結(jié)果小黑此外,如果需要將數(shù)據(jù)保存為文本的時候,還需要指定文件的編碼格式為,比如將上面的數(shù)據(jù)里面有中文字符保存為文件,代碼如下否則打開保存的文件,會有亂碼。 環(huán)境:python-3.6.5 JSON JSON(JavaScript Object Notation) 是一種輕量級的數(shù)據(jù)交換格式,它使得人們很容易的進(jìn)行閱讀和編寫。同時也方便了機(jī)器進(jìn)行解析和生成。適用于進(jìn)行數(shù)據(jù)交互的場...
摘要:如果該文件已存在,文件指針將會放在文件的結(jié)尾。運(yùn)行結(jié)果以上是讀取文件的方法。為了輸出中文,我們還需要指定一個參數(shù)為,另外規(guī)定文件輸出的編碼。 上一篇文章:Python3網(wǎng)絡(luò)爬蟲實(shí)戰(zhàn)---30、解析庫的使用:PyQuery下一篇文章:Python3網(wǎng)絡(luò)爬蟲實(shí)戰(zhàn)---32、數(shù)據(jù)存儲:關(guān)系型數(shù)據(jù)庫存儲:MySQL 我們用解析器解析出數(shù)據(jù)之后,接下來的一步就是對數(shù)據(jù)進(jìn)行存儲了,保存的形式可以...
摘要:本文將展示如何利用的模塊從文件中爬取表格數(shù)據(jù)。但如何從文件中提取其中的表格,這卻是一個大難題。我們以輸出文件為例從文件中提取表格將表格數(shù)據(jù)轉(zhuǎn)化為文件得到的文件如下例在例中,我們將提取頁面中的某一區(qū)域的表格的數(shù)據(jù)。 簡介 ??本文將展示一個稍微不一樣點(diǎn)的爬蟲。??以往我們的爬蟲都是從網(wǎng)絡(luò)上爬取數(shù)據(jù),因?yàn)榫W(wǎng)頁一般用HTML,CSS,JavaScript代碼寫成,因此,有大量成熟的技術(shù)來爬取...
摘要:以下這些項(xiàng)目,你拿來學(xué)習(xí)學(xué)習(xí)練練手。當(dāng)你每個步驟都能做到很優(yōu)秀的時候,你應(yīng)該考慮如何組合這四個步驟,使你的爬蟲達(dá)到效率最高,也就是所謂的爬蟲策略問題,爬蟲策略學(xué)習(xí)不是一朝一夕的事情,建議多看看一些比較優(yōu)秀的爬蟲的設(shè)計(jì)方案,比如說。 (一)如何學(xué)習(xí)Python 學(xué)習(xí)Python大致可以分為以下幾個階段: 1.剛上手的時候肯定是先過一遍Python最基本的知識,比如說:變量、數(shù)據(jù)結(jié)構(gòu)、語法...
摘要:套接字有兩種或者稱為有兩個種族分別是基于文件型的和基于網(wǎng)絡(luò)型的。大部分網(wǎng)絡(luò)設(shè)備的都是。不會發(fā)生黏包,用戶數(shù)據(jù)報協(xié)議是無連接的,面向消息的,提供高效率服務(wù)。即面向消息的通信是有消息保護(hù)邊界的。 軟件開發(fā)的架構(gòu) 我們了解的涉及到兩個程序之間通訊的應(yīng)用大致可以分為兩種: 第一種是應(yīng)用類:qq、微信、網(wǎng)盤、優(yōu)酷這一類是屬于需要安裝的桌面應(yīng)用 第二種是web類:比如百度、知乎、博客園等使用瀏覽器...
閱讀 928·2023-01-14 11:38
閱讀 902·2023-01-14 11:04
閱讀 759·2023-01-14 10:48
閱讀 2065·2023-01-14 10:34
閱讀 968·2023-01-14 10:24
閱讀 844·2023-01-14 10:18
閱讀 512·2023-01-14 10:09
閱讀 591·2023-01-14 10:02