中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python中優雅處理JSON文件的方法是什么

發布時間:2021-12-21 13:23:15 來源:億速云 閱讀:430 作者:柒染 欄目:開發技術

這篇文章給大家介紹Python中優雅處理JSON文件的方法是什么,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

    1. 引言

    我們將學習如何使用Python讀取、解析和編寫JSON文件。
    我們將討論如何最好地處理簡單的JSON文件以及嵌套的JSON文件,當然我們也將討論如何訪問Json文件數據中的特定值。

    2. 什么是JSON文件?

    JSON(Java Script Object Notation)是一種流行的文件格式,主要用于在web應用程序中存儲和傳輸數據。如果我們經常和數據打交道,那么一定或多或少遇到過JSON格式的文件,因此我們有必要來學習如何讀取和寫入JSON。

    下圖為常見的JSON文件結構的示例.

    Python中優雅處理JSON文件的方法是什么

    JSON結構看起來和Python中的字典非常類似。需要注意的是,JSON格式通常是由key: 結對組成,其中key是字符串形式,value是字符串、數字、布爾值、數組、對象或null。

    為了更直觀的進行說明,在下圖中我們以藍色突出顯示了所有的key,同時以橙色突出顯示了所有的value。請注意,以下每組key/value間均使用逗號進行區分。

    Python中優雅處理JSON文件的方法是什么

    3. 使用Python處理JSON文件

    在Python中內置了用于讀取JSON文件的函數。以下給出幾個如何將JSON文件解析為Python對象的示例。

    3.1. 將JSON文件讀取為字典類型

    首先我們需要導入 json庫, 接著我們使用open函數來讀取JSON文件,最后利用json.load()函數將JSON字符串轉化為Python字典形式.

    就這么簡單,代碼如下:

    import json
     
    with open('superheroes.json') as f:
        superHeroSquad = json.load(f)
        
    print(type(superHeroSquad))  # Output: dict
    print(superHeroSquad.keys())
    # Output: dict_keys(['squadName', 'homeTown', 'formed', 'secretBase', 'active', 'members'])

    上述代碼很簡單很直觀啦,唯一需要注意的是json庫中有load()和loads()兩個函數.

    函數load()作用為讀取JSON文件生成Python對象函數loads()作用為讀取JSON 字符串流生成Python對象

    我們可以將loads()函數中的字符s的含義理解成 load for strings.

    3.2. 將JSON文件讀取為Pandas類型

    當然我們也可以使用Pandas庫中的 read_json函數來讀取對應的JSON文件,

    代碼如下:

    import pandas as pd
    df = pd.read_json('superheroes.json')

    運行結果如下:

    Python中優雅處理JSON文件的方法是什么

    需要注意的是使用Pandas庫不僅僅可以讀取電腦本地磁盤上的JSON文件,也可以通過URL讀取網絡上存放的文件.

    代碼如下:

    df1 = pd.read_json('https://mdn.github.io/learning-area/javascript/oojs/json/superheroes.json')

    3.3. 使用Pandas讀取嵌套JSON類型

    我們有時候遇到的JSON文件是嵌套的,這經常會讓讀取工作變得有些困難. 其實嵌套JSON和Python中的嵌套字典思想類似,即字典中嵌套字典.

    我們觀察上述例子中的member字段,其值也為字典類型,下圖中我們使用縮進來展示嵌套結構。

    Python中優雅處理JSON文件的方法是什么

    設想一下,當我們將JSON文件加載到Pandas數據框架中時,members列如下所示。每行包含一個字典。

    Python中優雅處理JSON文件的方法是什么
    接下來我們討論兩種實現方法,這兩種方法中,我們可以解析數據,以便將每個鍵分解為單獨的一列。

    方案一

    我們可以在members這一列上使用apply方法,代碼如下:

    df['members'].apply(pd.Series)

    上述代碼執行后,members列會被拆分為4個新列,如下所示:

    Python中優雅處理JSON文件的方法是什么

    當然如果你想將上述拆分后的結果和之前的結果進行合并,可以使用pd.concat函數,

    代碼如下:

    df = pd.concat([df['members'].apply(pd.Series), df.drop('members', axis = 1)], axis = 1)

    方案二

    在Pandas庫中還有一個函數 json_normalize() ,它允許我們把嵌套的JSON展開。這是最簡單的方法來解析嵌套的JSON了。

    代碼如下:

    def test2():
        with open('superheroes.json') as f:
            superHeroSquad = json.load(f)
        out = pd.json_normalize(superHeroSquad, record_path=['members'],
                          meta=['squadName', 'homeTown', 'formed', 'secretBase', 'active'])
        print(out)

    上述代碼中:

    • record_path為我們希望拆分的列的名字

    • meta為列名的list,為我們輸出的次序

    運行結果如下:

    Python中優雅處理JSON文件的方法是什么

    最后我們需要注意的是,我們可以在上述函數json_normalize中添加參數 meta_prefix,這樣可以讓我們對meta中的名字添加統一的前綴。

    代碼如下:

    pd.json_normalize(superHeroSquad, 
    	record_path = ['members'], 
    	meta = ['squadName', 'homeTown', 'formed', 'secretBase', 'active'], 
    	meta_prefix = 'members_')

    運行結果如下:

    Python中優雅處理JSON文件的方法是什么

    3.4. 訪問特定位置的數據

    在Python中我們可以通過Key的名字或者下標來訪問JSON文件中任意位置的數據。

    比如,假設我們想知道我們的第二個超級英雄的秘密身份。即在下圖中,需要訪問特定位置的數據在下圖中以紫色突出顯示。

    Python中優雅處理JSON文件的方法是什么

    為了得到這個值,我們可以直接使用以下語句:

    superHeroSquad['members'][1]['secretIdentity']

    從層次結構的頂部開始,由上往下,我們需要的第一個key是'members',因為它是我們需要訪問的值所在的父節點。

    Python中優雅處理JSON文件的方法是什么

    在‘members'對應的鍵值中,我們看中括號,然后下標1表示list中的第二個成員。接著我們來看字段'secretIdentity',如下所示:

    Python中優雅處理JSON文件的方法是什么

    將上述過程合并在一起,我們就可以得到我們特定位置出的值為'Jane Wilson'。

    細心的同學可能已經注意到,我在上面的JSON片段中突出顯示了兩個藍色的值。希望感興趣的同學們可以作為練習來嘗試訪問這些值。歡迎在文章后面的評論區中分享你的代碼。

    3.5. 導出JSON

    讓我們編輯一下我們最后一位超級英雄,將其secretIdentity從‘Unknow'更改為‘Will Smith',接著將這個字典導出為JSON文件。這里我們將使用json.dump()函數將字典寫入文件。

    代碼如下:

    #update secret identity of Eternal Flame
    superHeroSquad['members'][2]['secretIdentity'] = 'Will Smith'
    with open('superheroes.json', 'w') as file:
        json.dump(superHeroSquad, file)

    上述代碼運行后,我們打開文件superheroes.json,可以發現最后一名超級英雄的secretIdentity已經由Unknow變為了Will Smith.

    當然,作為選擇,我們也可以使用Pandas中的to_json()函數,完成上述功能。

    df.to_json('superheroes.json')

    3.6. 格式化輸出

    我們有時候在終端直接打印json文件,通常會得到很不美觀的輸出,樣例如下:

    Python中優雅處理JSON文件的方法是什么

    為了讓其看起來更加美觀,我們這里可以在函數json.dump中采用參數indent參數來控制輸出格式,代碼如下:

    with open('superheroes.json', 'w') as file:
        json.dump(superHeroSquad, file, indent = 4)

    結果輸出如下,是不是看上去更加美觀啦。。。

    Python中優雅處理JSON文件的方法是什么

    3.7. 輸出字段排序

    當然dump函數中含有字段sort_key,通過設置其值,可以控制輸出時是否對key進行排序。需要注意所有的key包括嵌套的key都會進行排序。

    樣例如下:

    with open('superheroes.json', 'w') as file:
        json.dump(superHeroSquad, file, indent = 4, sort_keys = True)

    運行結果如下:

    Python中優雅處理JSON文件的方法是什么

    4.總結

    最后,讓我們對本文做一下回顧,總結如下:

    • JSON文件通常由key:結對組成,這里key通常為字符串格式,value一般為字符串,數字,布爾,數組,對象或者null

    • Python有內置函數可以方便的讀取JSON文件轉化為Python中的字典類型或者Pandas可以處理的類型

    • 使用pd.read_json()來讀取簡單的JSON,使用pd.json_normalize()來讀取嵌套的JSON

    • 我們可以通過key的名字或者下標來方便的獲取JSON文件中特定位置的值

    • Python對象可以轉化為JSON文件,同時可以對輸出進行格式化輸出以增加可讀性

    關于Python中優雅處理JSON文件的方法是什么就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    个旧市| 南开区| 会同县| 郁南县| 泸溪县| 溧水县| 高清| 菏泽市| 安新县| 贡嘎县| 阜南县| 科技| 赤壁市| 宣威市| 交城县| 喜德县| 宾川县| 奈曼旗| 和龙市| 泸州市| 扶沟县| 纳雍县| 南召县| 淳安县| 卢湾区| 肃宁县| 馆陶县| 玉屏| 勐海县| 怀化市| 莆田市| 蒙城县| 忻州市| 西充县| 彭泽县| 昌黎县| 宣城市| 仁布县| 安图县| 宜州市| 称多县|