python作為一種比較常見的編程語言,其應用的范圍還是比較的廣泛的,主要講解的內容是如何使用python提取JSON數據指定內容,需要我們好好的去進行一個實操。那么,怎么樣快速的才能夠上手這項技能呢?下面小編給大家詳細解答下。
如何提取JSON數據指定內容
假設我們要獲取'pic_str'里的數據
JSON數據
{'err_no':0,'err_str':'OK','pic_id':'1169213517976400008','pic_str':'xoet','md5':'ca9bc4fda521498d2b3aba5dbb4ee4ac'}
1、JSON數據為字符串類型
import json str="{'err_no':0,'err_str':'OK','pic_id':'1169213517976400008','pic_str':'xoet','md5':'ca9bc4fda521498d2b3aba5dbb4ee4ac'}" json_str=str.replace("'",'"') #json.loads(),要求json串格式中必須的雙引號!!轉換為字典 json_dict=json.loads(dict2) print(json_dict['pic_str']) >>xoet
2、JSON數據為字典類型
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)
如何提取復雜JSON的數據
在越來越多的項目中,基本都用了json作為接口數據返回的格式。json給我們的感覺就是通俗易懂,只是即使再復雜的結構也會比其他格式容易看。然而一旦在調試或者測試中需要用到提取某一部分字段數據進行解析并校驗的話,就沒那么容易了。這篇文章使用python簡單地獲取到復雜json數據中的字段信息。
例子
如果有一個接口返回的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" ] } ] }
這里就包含了對象,以及列表數據。對象中也包含列表數據。這應該是最基本的企業接口json格式了。
假如你要提取json中的name信息,最簡單的方式就是
member=[members.get('name')for members in data.get('familyMembers')]
如果是要連續拿其他的信息,那么就需要換其他中獲取方式,其實這種是比較麻煩的一種方法。
解決方法
extract_element_from_json(data,["familyMembers","name"]) >>['Jobs','James']
此函數根據path中指定的鍵嵌套到obj中的記錄中以檢索所需的信息。當遇到一個列表作為path中鍵的值時,此函數會拆分并以深度優先的方式繼續嵌套在遇到的列表的每個元素上。這就是返回['Jobs','James']的方式;因為familyMembers的值是一個列表,所以嵌套在它的兩個元素上被拆分,并且name的每個值都附加到輸出列表中。
如果obj是單個字典/json,則此函數返回包含所需信息的列表,如果obj是字典/json列表,則此函數返回包含所需信息的雙重列表。
如果嵌套字典/json的相應級別缺少path的元素,則此函數返回[None]。
完整代碼如下:
def extract_element_from_json(obj,path): ''' 輸入關鍵字,就可以將關鍵字的值信息存放在列表中并輸出 如果關鍵字是對象名,則返回的對象字典信息到列表中 如果關鍵字是列表名,則返回的列表信息到列表中(返回雙重列表) ''' def extract(obj,path,ind,arr): ''' 從一個嵌套的字典中提取一個元素,并返回到列表中。 params:obj-dict-輸入字典 params:path-list-構成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
這段代碼可以直接復制使用。
其中使用方法很簡單如下:
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"])
就是這么簡單地使用了。
應用場景
通過這樣的方式可以在什么場景下使用呢?
接口重構,需要校驗接口中的部分字段數據
接口新增字段,只針對新增的字段進行提取校驗
需要提取某一部分字段進行數據傳遞
這篇文章就給大家介紹到這里了,希望可以給大家帶來幫助。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/128294.html
摘要:如下運行結果小黑此外,如果需要將數據保存為文本的時候,還需要指定文件的編碼格式為,比如將上面的數據里面有中文字符保存為文件,代碼如下否則打開保存的文件,會有亂碼。 環境:python-3.6.5 JSON JSON(JavaScript Object Notation) 是一種輕量級的數據交換格式,它使得人們很容易的進行閱讀和編寫。同時也方便了機器進行解析和生成。適用于進行數據交互的場...
摘要:如果該文件已存在,文件指針將會放在文件的結尾。運行結果以上是讀取文件的方法。為了輸出中文,我們還需要指定一個參數為,另外規定文件輸出的編碼。 上一篇文章:Python3網絡爬蟲實戰---30、解析庫的使用:PyQuery下一篇文章:Python3網絡爬蟲實戰---32、數據存儲:關系型數據庫存儲:MySQL 我們用解析器解析出數據之后,接下來的一步就是對數據進行存儲了,保存的形式可以...
摘要:本文將展示如何利用的模塊從文件中爬取表格數據。但如何從文件中提取其中的表格,這卻是一個大難題。我們以輸出文件為例從文件中提取表格將表格數據轉化為文件得到的文件如下例在例中,我們將提取頁面中的某一區域的表格的數據。 簡介 ??本文將展示一個稍微不一樣點的爬蟲。??以往我們的爬蟲都是從網絡上爬取數據,因為網頁一般用HTML,CSS,JavaScript代碼寫成,因此,有大量成熟的技術來爬取...
摘要:以下這些項目,你拿來學習學習練練手。當你每個步驟都能做到很優秀的時候,你應該考慮如何組合這四個步驟,使你的爬蟲達到效率最高,也就是所謂的爬蟲策略問題,爬蟲策略學習不是一朝一夕的事情,建議多看看一些比較優秀的爬蟲的設計方案,比如說。 (一)如何學習Python 學習Python大致可以分為以下幾個階段: 1.剛上手的時候肯定是先過一遍Python最基本的知識,比如說:變量、數據結構、語法...
摘要:套接字有兩種或者稱為有兩個種族分別是基于文件型的和基于網絡型的。大部分網絡設備的都是。不會發生黏包,用戶數據報協議是無連接的,面向消息的,提供高效率服務。即面向消息的通信是有消息保護邊界的。 軟件開發的架構 我們了解的涉及到兩個程序之間通訊的應用大致可以分為兩種: 第一種是應用類:qq、微信、網盤、優酷這一類是屬于需要安裝的桌面應用 第二種是web類:比如百度、知乎、博客園等使用瀏覽器...
閱讀 911·2023-01-14 11:38
閱讀 878·2023-01-14 11:04
閱讀 740·2023-01-14 10:48
閱讀 1983·2023-01-14 10:34
閱讀 942·2023-01-14 10:24
閱讀 819·2023-01-14 10:18
閱讀 499·2023-01-14 10:09
閱讀 572·2023-01-14 10:02