最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用python如何提取JSON數(shù)據(jù)指定內(nèi)容

 更新時(shí)間:2022年07月06日 14:29:25   作者:hrflex  
這篇文章主要介紹了使用python如何提取JSON數(shù)據(jù)指定內(nèi)容,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

如何提取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串格式中必須的雙引號(hào)!!轉(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)也會(huì)比其他格式容易看。然而一旦在調(diào)試或者測(cè)試中需要用到提取某一部分字段數(shù)據(jù)進(jìn)行解析并校驗(yàn)的話,就沒那么容易了。這篇文章使用 python 簡(jiǎn)單地獲取到復(fù)雜 json 數(shù)據(jù)中的字段信息。

例子

如果有一個(gè)接口返回的 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"
? ? ? ]
? ? }
? ]
}

這里就包含了對(duì)象,以及列表數(shù)據(jù)。對(duì)象中也包含列表數(shù)據(jù)。這應(yīng)該是最基本的企業(yè)接口 json 格式了。

假如你要提取 json 中的 name 信息,最簡(jiǎn)單的方式就是

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)遇到一個(gè)列表作為 path 中鍵的值時(shí),此函數(shù)會(huì)拆分并以深度優(yōu)先的方式繼續(xù)嵌套在遇到的列表的每個(gè)元素上。這就是返回 ['Jobs', 'James'] 的方式;因?yàn)?familyMembers 的值是一個(gè)列表,所以嵌套在它的兩個(gè)元素上被拆分,并且 name 的每個(gè)值都附加到輸出列表中。

如果 obj 是單個(gè)字典/ json,則此函數(shù)返回包含所需信息的列表,如果 obj 是字典/ json 列表,則此函數(shù)返回包含所需信息的雙重列表。

如果嵌套字典/ json 的相應(yīng)級(jí)別缺少 path 的元素,則此函數(shù)返回 [None]。

完整代碼如下: 

def extract_element_from_json(obj, path):
    '''
    輸入關(guān)鍵字,就可以將關(guān)鍵字的值信息存放在列表中并輸出
    如果關(guān)鍵字是對(duì)象名,則返回的對(duì)象字典信息到列表中
    如果關(guān)鍵字是列表名,則返回的列表信息到列表中(返回雙重列表)
    '''
    def extract(obj, path, ind, arr):
    	'''
    	從一個(gè)嵌套的字典中提取一個(gè)元素,并返回到列表中。
        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ù)制使用。

其中使用方法很簡(jiǎn)單如下:

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"])

就是這么簡(jiǎn)單地使用了。

應(yīng)用場(chǎng)景

通過這樣的方式可以在什么場(chǎng)景下使用呢?

  • 接口重構(gòu),需要校驗(yàn)接口中的部分字段數(shù)據(jù)
  • 接口新增字段,只針對(duì)新增的字段進(jìn)行提取校驗(yàn)
  • 需要提取某一部分字段進(jìn)行數(shù)據(jù)傳遞

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • python的Template使用指南

    python的Template使用指南

    本文主要講解了python中Template使用方法以及使用技巧,非常實(shí)用,有需要的朋友可以參考下
    2014-09-09
  • 淺談使用Python內(nèi)置函數(shù)getattr實(shí)現(xiàn)分發(fā)模式

    淺談使用Python內(nèi)置函數(shù)getattr實(shí)現(xiàn)分發(fā)模式

    這篇文章主要介紹了淺談使用Python內(nèi)置函數(shù)getattr實(shí)現(xiàn)分發(fā)模式,小編覺得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2018-01-01
  • 詳解python os.path.exists判斷文件或文件夾是否存在

    詳解python os.path.exists判斷文件或文件夾是否存在

    這篇文章主要介紹了詳解python os.path.exists判斷文件或文件夾是否存在,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • Python圖片存儲(chǔ)和訪問的三種方式詳解

    Python圖片存儲(chǔ)和訪問的三種方式詳解

    在?Python?中處理圖像數(shù)據(jù)的時(shí)候,例如應(yīng)用卷積神經(jīng)網(wǎng)絡(luò)等算法可以處理大量圖像數(shù)據(jù)集,這里就需要學(xué)習(xí)如何用最簡(jiǎn)單的方式存儲(chǔ)、讀取數(shù)據(jù)。本文介紹了Python中圖片存儲(chǔ)和訪問的三種方式,需要的可以參考一下
    2022-04-04
  • Python批量給excel文件加密的操作教程

    Python批量給excel文件加密的操作教程

    有時(shí)候我們需要定期給公司外部發(fā)郵件,在自動(dòng)化發(fā)郵件的時(shí)候需要對(duì)文件進(jìn)行加密傳輸,本文和你一起來探索用python給單個(gè)文件和批量文件加密,需要的朋友可以參考下
    2025-07-07
  • Python中的zipfile模塊使用詳解

    Python中的zipfile模塊使用詳解

    這篇文章主要介紹了Python中的zipfile模塊使用詳解,zipfile模塊是用來操作zip文件,需要的朋友可以參考下
    2015-06-06
  • Pytorch如何加載部分權(quán)重

    Pytorch如何加載部分權(quán)重

    這篇文章主要介紹了Pytorch如何加載部分權(quán)重問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • 很酷的python表白工具 你喜歡我嗎

    很酷的python表白工具 你喜歡我嗎

    這篇文章主要為大家分享了一款很酷的python表白工具,可以發(fā)給女生表白用,界面簡(jiǎn)單,實(shí)用性強(qiáng),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-04-04
  • 在Sublime Editor中配置Python環(huán)境的詳細(xì)教程

    在Sublime Editor中配置Python環(huán)境的詳細(xì)教程

    這篇文章主要介紹在sublime編輯器中安裝python軟件包,以 實(shí)現(xiàn)自動(dòng)完成等功能,并在sublime編輯器本身中運(yùn)行build,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友參考下吧
    2020-05-05
  • Python學(xué)習(xí)之迭代器詳解

    Python學(xué)習(xí)之迭代器詳解

    這篇文章主要介紹了Python中的一個(gè)新的概念,那就是迭代器 。迭代器的使用可以幫助我們提升代碼的性能,接下來讓我們深入了解一下迭代器吧
    2022-04-04

最新評(píng)論

曲沃县| 体育| 库伦旗| 平谷区| 开化县| 开阳县| 外汇| 忻州市| 沅江市| 昂仁县| 古交市| 阿克陶县| 舞阳县| 西安市| 九龙县| 丹寨县| 陇川县| 揭西县| 海兴县| 云龙县| 横峰县| 珲春市| 黔西| 鄂尔多斯市| 武邑县| 临沧市| 盐源县| 贵溪市| 台东县| 胶州市| 尼玛县| 沭阳县| 沙坪坝区| 南城县| 乌什县| 临武县| 平泉县| 泌阳县| 嘉义县| 高淳县| 丰顺县|