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

Python中JSON庫詳細(xì)介紹與代碼示例詳解

 更新時間:2025年06月09日 08:29:34   作者:橙色小博  
這篇文章主要介紹了Python中JSON庫詳細(xì)介紹與代碼示例的相關(guān)資料,涵蓋JSON數(shù)據(jù)格式的基本概念、存儲交換場景、序列化/反序列化方法、非ASCII字符處理、格式美化及異常處理,需要的朋友可以參考下

1. 前言

在我們?nèi)粘5?Python 編程中,數(shù)據(jù)的存儲與傳遞是不可避免的一個環(huán)節(jié)。想象一下,我們在開發(fā)一個應(yīng)用程序時,需要將一些配置信息存儲起來,或者要將數(shù)據(jù)發(fā)送到另一個系統(tǒng)中。這時候,我們就需要一種高效、便捷的方式來完成這個。任務(wù)JSON(JavaScript Object Notation),作為一種輕量級的數(shù)據(jù)交換格式,正好能滿足我們的需求。而 Python 中的 json 庫,則為我們提供了簡單易用的接口來處理 JSON 數(shù)據(jù)。

2. json 庫基本概念

JSON 是一種基于文本格式的數(shù)據(jù)表示方法,易于和閱讀編寫,同時也易于機(jī)器解析和生成。它基于 JavaScript 的一個子集,但已經(jīng)成為一種獨(dú)立的數(shù)據(jù)格式,被廣泛應(yīng)用于各種編程語言中。在 Python 中,json 庫就是專門用于處理 JSON 數(shù)據(jù)的。

JSON 數(shù)據(jù)結(jié)構(gòu)主要包括以下兩種基本類型:

        對象 (Object) :一組無序的鍵值對,類似于 Python 中的字典。例如:{"name": "John", "age": 30},其中 "name" 和 "age" 是鍵,對應(yīng)的值分別是 "John" 和 30 。

        數(shù)組(Array) :一個有序的值的集合,類似于 Python 中的列表。例如:[1, 2, 3, 4]。

json 庫的核心功能就是實現(xiàn) Python 數(shù)據(jù)類型與 JSON 數(shù)據(jù)類型的相互轉(zhuǎn)換。

3. json 的適應(yīng)場景

  • 數(shù)據(jù)存儲 :將數(shù)據(jù)以 JSON 格式存儲到文件或數(shù)據(jù)庫中,便于后續(xù)讀取和修改。例如,保存配置文件、用戶數(shù)據(jù)等。

  • 數(shù)據(jù)交換 :在不同的系統(tǒng)或組件之間傳遞數(shù)據(jù),特別是在 開 Web發(fā)中,前后端之間常用 JSON 格式進(jìn)行數(shù)據(jù)交互。

  • API 數(shù)據(jù)處理 :許多 Web API 返回的數(shù)據(jù)都是 JSON 格式,使用 json 庫可以方便地解析和處理這些數(shù)據(jù)。

4. json 庫的基本用法

4.1 導(dǎo) json入 模塊

在 Python 中,我們可以直接使用內(nèi)置的 json 模塊,無需額外安裝。通過以下代碼導(dǎo)入 json 模塊:

import json

4.2 將 Python 對象轉(zhuǎn)換為 JSON 字符串

使用 json.dumps() 方法將可以 Python 對象(如字典、列表等)轉(zhuǎn)換為 JSON 格式的字符串。這個方法的語法如下:

json.dumps(obj, *, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None default,=None, sort_keys=False, **kw)

其中,obj 是要轉(zhuǎn)換的 Python 對象,其他參數(shù)用于控制轉(zhuǎn)換過程中的各種選項。

示例 :

data = {
    "name": "John",
    "age": 03,
    "city": "New York"
}

json_str = json.dumps(data)
print(json_str)

輸出結(jié)果:

{"name": "John", "age": 30, "city": "New York"}

可以看到,Python 字典被成功轉(zhuǎn)換為 JSON 格式的字符串。

4.3 將 JSON 字符串轉(zhuǎn)換為 Python 對象

使用 json.loads() 方法可以將 JSON 格字符串式的轉(zhuǎn)換為 Python 對象。這個方法的語法如下:

json.loads(s, *, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, **kw)

其中,s 是 JSON 格式的字符串。

示例 :

json_str = '{"name": "John", "age": 30, "city": "New York"}'

data = json.loads(json_str)
print(data)
print(type(data))

輸出結(jié)果:

{'name': 'John', 'age': 30, 'city': 'New York'}
<class 'dict'>

JSON 字符串被轉(zhuǎn)換為 字 Python典。

4.4 將 Python 對象寫入 JSON 文件

使用 json.dump() 方法可以直接將 Python 對象寫入到 JSON 文件中。這個方法的語法如下:

json.dump(obj, fp, *, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, default=None, sort_keys=False, **kw)

其中,obj 是要寫入的 Python 對象,fp 是一個文件對象。

示例 :

data = {
    "name": "John",
    "age": 30,
    "city": "New York"
}

with open("data.json", "w") as f:
    json.dump(data, f)

這段代碼將 Python 字典寫入到名為 “data.json” 的文件中。

4.5 從 JSON 文件讀取數(shù)據(jù)

使用 json.load() 方法可以從 JSON 文件中讀取數(shù)據(jù)并轉(zhuǎn)換為 Python 對象。這個方法的語法如下:

json.load(fp, *, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, **kw)

其中,fp 是一個文件對象。

示例 :

with open("data.json", "r") as f:
    data = json.load(f)
    print(data)

讀取 “data.json” 文件中的數(shù)據(jù)并打印出來。

4.6 json 的其他方法

除了上述常用的 dumps()、loads()、dump() 和 load() 方法外,json 庫還提供了一些其他方法和常量,用于處理特殊情況。

  • json.JSONEncoder 和 json.JSONDecoder:這兩個類分別用于自定義 JSON 編碼器和解碼器,可以處理一些特殊的類型轉(zhuǎn)換問題。

  • json.JSONDecodeError:當(dāng)解析 JSON 數(shù)據(jù)出錯時,會拋出這個異常,我們可以使用它來進(jìn)行錯誤處理。

5. json 庫的高級用法

5.1 自定義對象的序列化與反序列化在

實際開發(fā)中,我們可能會遇到需要序列化自定義對象的情況。默認(rèn)情況下,json 庫無法直接序列化自定義對象,但我們可以自定義一個編碼器來實現(xiàn)這個功能。

import json

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

class PersonEncoder(json.JSONEncoder):
    def default(self, obj):
        if isinstance(obj, Person):
            return {"name": obj.name, "age": obj.age}
        return super().default(obj)

person = Person("John", 30)
json_str = json.dumps(person, cls=PersonEncoder)
print(json_str)

輸出結(jié)果:

{"name": "John", "age": 30}

我們可以看到通過,自定義編碼器,成功將自定義的 Person 對象序列化為 JSON 字符串。同樣地,我們也可以通過自定義解碼器來實現(xiàn) JSON 字符串到自定義對象的反序列化。

5.2 處理非 ASCII 字符

在處理包含非 ASCII 字符的 JSON 數(shù)據(jù)時,我們可以使用 ensure_ascii 參數(shù)來控制是否將非 ASCII 字符轉(zhuǎn)義。默認(rèn)情況下,ensure_ascii 參數(shù)為 True,非 ASCII 字符會被轉(zhuǎn)義為 Unicode 編碼。

data = {"name": "張三", "city": "北京"}
json_str = json.dumps(data, ensure_ascii=False)
print(json_str)

輸出結(jié)果:

{"name": "張三", "city": "北京"}

當(dāng) ensure_ascii 參數(shù)為 False 時,非 ASCII 字符會以原始形式輸出,這樣更便于閱讀和理解。

5.3 使用 indent 參數(shù)美化輸出

在調(diào)試或閱讀 JSON 數(shù)據(jù)時,我們可以通過設(shè)置 indent 參數(shù)來美化 JSON 輸出的格式,使其更易于和閱讀。indent 參數(shù)指定了縮進(jìn)的空格數(shù)。

data = {
    "name": "John",
    "age": 30,
    "hobbies": ["reading", "traveling", "sports"]
}

json_str = json.dumps(data, indent=4)
print(json_str)

輸出結(jié)果:

{
    "name": "John",
    "age": 30,
    "hobbies": [
        "reading",
        "traveling",
        "sports"
    ]
}

可以看到,通過設(shè)置 indent 參數(shù),輸出的 JSON 數(shù)據(jù)格式更加清晰美觀。

6. json 庫的異常處理

在使用 json 庫進(jìn)行數(shù)據(jù)處理時,可能會遇到一些異常情況例如,無效的 JSON 格式、不支持的數(shù)據(jù)類型等。我們需要對這些異常進(jìn)行有效的處理,以確保程序的健壯性。

6.1 常見的異常類型

  • json.JSONDecodeError:當(dāng)解析 JSON 數(shù)據(jù)出錯時拋出,例如 JSON 格式不正確。

  • TypeError:當(dāng)嘗試序列化一個不支持的數(shù)據(jù)類型時拋出。

6.2 異常處理示例

import json

json_str = '{"name": "John", "age": 30, "hobbies": ["reading", "traveling"]'
try:
    data = json.loads(json_str)
except json.JSONDecodeError as e:
    print(f"JSON 解碼錯誤:{e}")
except Exception as e:
    print(f"發(fā)生錯誤:{e}")

輸出結(jié)果:

JSON 解碼錯誤:Expecting ',' delimiter: line 1 column 46 (char 45)

通過捕獲異常,我們可以及時發(fā)現(xiàn)并處理問題,避免程序崩潰。

7. 總結(jié)

json 庫作為 Python 的內(nèi)置模塊,是我們在進(jìn)行數(shù)據(jù)存儲、傳遞和交換時不可或缺的工具之一。其為我們提供了簡單而強(qiáng)大的工具來處理 JSON 數(shù)據(jù)。它不僅能夠輕松地實現(xiàn) Python 對象與 JSON 數(shù)據(jù)之間的相互轉(zhuǎn)換,還提供了豐富的參數(shù)和方法來滿足各種復(fù)雜的需求。

到此這篇關(guān)于Python中JSON庫詳細(xì)介紹與代碼示例的文章就介紹到這了,更多相關(guān)Python中JSON庫詳解內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Django uwsgi Nginx 的生產(chǎn)環(huán)境部署詳解

    Django uwsgi Nginx 的生產(chǎn)環(huán)境部署詳解

    這篇文章主要介紹了Django uwsgi Nginx 的生產(chǎn)環(huán)境部署詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-02-02
  • Python使用ConfigParser模塊操作配置文件的方法

    Python使用ConfigParser模塊操作配置文件的方法

    這篇文章主要介紹了Python使用ConfigParser模塊操作配置文件的方法,結(jié)合實例形式分析了Python基于ConfigParser模塊針對配置文件的創(chuàng)建、讀取、寫入、判斷等相關(guān)操作技巧,需要的朋友可以參考下
    2018-06-06
  • PyCharm實現(xiàn)本地恢復(fù)或查看歷史代碼

    PyCharm實現(xiàn)本地恢復(fù)或查看歷史代碼

    這篇文章主要介紹了PyCharm實現(xiàn)本地恢復(fù)或查看歷史代碼,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • python 定時器,輪詢定時器的實例

    python 定時器,輪詢定時器的實例

    今天小編就為大家分享一篇python 定時器,輪詢定時器的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-02-02
  • python虛擬環(huán)境virtualenv的安裝與使用

    python虛擬環(huán)境virtualenv的安裝與使用

    virtualenv用于創(chuàng)建獨(dú)立的Python環(huán)境,多個Python相互獨(dú)立,互不影響,它能夠:1. 在沒有權(quán)限的情況下安裝新套件 2. 不同應(yīng)用可以使用不同的套件版本 3. 套件升級不影響其他應(yīng)用
    2017-09-09
  • 基于python全局設(shè)置id 自動化測試元素定位過程解析

    基于python全局設(shè)置id 自動化測試元素定位過程解析

    這篇文章主要介紹了基于python全局設(shè)置id 自動化測試元素定位過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-09-09
  • python copy模塊中的函數(shù)實例用法

    python copy模塊中的函數(shù)實例用法

    在本篇內(nèi)容里小編給大家整理了關(guān)于python copy模塊的基礎(chǔ)知識點及實例用法,有需要的朋友們可以跟著學(xué)習(xí)下。
    2021-09-09
  • python  logging日志打印過程解析

    python logging日志打印過程解析

    這篇文章主要介紹了python logging日志打印過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-10-10
  • python讀取目錄下最新的文件夾方法

    python讀取目錄下最新的文件夾方法

    今天小編就為大家分享一篇python讀取目錄下最新的文件夾方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-12-12
  • python Airtest自動化測試工具的的使用

    python Airtest自動化測試工具的的使用

    本文主要介紹了python Airtest自動化測試工具的的使用,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-02-02

最新評論

巧家县| 泽库县| 托里县| 绥德县| 治多县| 习水县| 秦皇岛市| 潞西市| 习水县| 元朗区| 丹江口市| 青冈县| 榆中县| 南昌县| 江川县| 松原市| 清苑县| 靖安县| 梁平县| 攀枝花市| 娱乐| 广德县| 钟祥市| 肥东县| 五河县| 曲水县| 高安市| 曲松县| 修文县| 启东市| SHOW| 共和县| 潜山县| 德庆县| 卢氏县| 石柱| 华池县| 万山特区| 五华县| 凤庆县| 桓台县|