您好,登錄后才能下訂單哦!
本篇內容介紹了“怎么使用python提取JSON數據指定內容”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
JSON數據
{'err_no': 0, 'err_str': 'OK', 'pic_id': '1169213517976400008', 'pic_str': 'xoet', 'md5': 'ca9bc4fda521498d2b3aba5dbb4ee4ac'}
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
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 給我們的感覺就是通俗易懂,只是即使再復雜的結構也會比其他格式容易看。然而一旦在調試或者測試中需要用到提取某一部分字段數據進行解析并校驗的話,就沒那么容易了。這篇文章使用 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"])
import requests url = "http://ip-api.com/json" response = requests.request("GET", url) data = response.json() extract_element_from_json(data, ["status"])
就是這么簡單地使用了。
通過這樣的方式可以在什么場景下使用呢?
接口重構,需要校驗接口中的部分字段數據
接口新增字段,只針對新增的字段進行提取校驗
需要提取某一部分字段進行數據傳遞
“怎么使用python提取JSON數據指定內容”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。