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

Python中JSON使用方式的超詳細教程

 更新時間:2025年09月10日 10:17:20   作者:長風清留揚  
這篇文章主要介紹了是一種輕量級的數(shù)據(jù)交換格式,易于人閱讀和編寫,同時也易于機器解析和生成,本文將詳細介紹Python中JSON使用方式,有需要的小伙伴可以了解下

什么是JSON

JSON(JavaScript Object Notation)是一種輕量級的數(shù)據(jù)交換格式,易于人閱讀和編寫,同時也易于機器解析和生成。它基于JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999的一個子集,但JSON是獨立于語言的,很多編程語言都支持JSON格式數(shù)據(jù)的生成和解析。

JSON的構(gòu)造

對象(Object)

定義

  • 對象在JSON中由花括號“{}”括起來。
  • 對象內(nèi)部由一系列鍵值對(key-value pair)組成,鍵值對之間用逗號分隔。

鍵(Key)

  • 鍵是一個字符串,必須用雙引號括起來。
  • 鍵名不區(qū)分大小寫,但通常按照慣例使用小寫字母和下劃線。

值(Value):

  • 值可以是字符串、數(shù)字、布爾值(true/false)、數(shù)組、對象或null。
  • 如果值是字符串,則必須用雙引號括起來。

結(jié)構(gòu)示例

{  
    "name": "Alice",  
    "age": 30,  
    "city": "New York",  
    "isStudent": false,  
    "skills": ["Python", "Java", "C++"]  
}

數(shù)組(Array)

定義:

  • 數(shù)組在JSON中由中括號“[]”括起來。
  • 數(shù)組內(nèi)部由一系列值組成,這些值之間用逗號分隔。

值:

數(shù)組中的值可以是任何類型,包括字符串、數(shù)字、布爾值、數(shù)組、對象或null。

結(jié)構(gòu)示例

[  
    "apple",  
    "banana",  
    "cherry",  
    {  
        "name": "Alice",  
        "age": 30  
    },  
    [1, 2, 3, 4, 5]  
]

嵌套結(jié)構(gòu)

定義:

JSON允許對象和數(shù)組之間互相嵌套,從而構(gòu)造出復雜的數(shù)據(jù)結(jié)構(gòu)。

結(jié)構(gòu)示例

{  
    "name": "Bob",  
    "children": [  
        {  
            "name": "Alice",  
            "age": 10  
        },  
        {  
            "name": "Charlie",  
            "age": 7  
        }  
    ],  
    "address": {  
        "street": "123 Main St",  
        "city": "Anytown",  
        "state": "CA"  
    }  
}

注意事項

數(shù)據(jù)類型:

  • JSON中的數(shù)據(jù)類型比JavaScript中更為嚴格,只有字符串、數(shù)字、布爾值、數(shù)組、對象和null。
  • 字符串必須用雙引號括起來,不能使用單引號。

鍵名唯一性:

在同一個對象中,鍵名是唯一的,不能重復。

排序:

JSON對象中的鍵值對是無序的,即鍵名不保證按照插入順序排列。如果需要有序性,可以在生成JSON字符串時通過指定參數(shù)進行排序。

空值:

JSON中可以使用null來表示空值或不存在的值。

Json在Python中的對應關(guān)系

PythonJSON
dictobject
list, tuplearray
str, unicodestring
int, long, floatnumber
Truetrue
Falsefalse
Nonenull

Python中JSON的常用方法

方法名稱描述
json.loads()將JSON格式的字符串解析成Python對象(如字典或列表)
json.dumps()將Python對象(如字典或列表)轉(zhuǎn)換成JSON格式的字符串
json.load()從文件中讀取JSON格式的數(shù)據(jù),并解析成Python對象
json.dump()將Python對象轉(zhuǎn)換成JSON格式的數(shù)據(jù),并寫入文件
json.JSONDecoder()創(chuàng)建一個JSON解碼器對象,用于解析JSON字符串(通常直接使用json.loads()更常見)
json.JSONEncoder()創(chuàng)建一個JSON編碼器對象,用于將Python對象轉(zhuǎn)換成JSON字符串(通常直接使用json.dumps()更常見)
json.JSONDecodeError異常類,用于處理JSON解碼時發(fā)生的錯誤

json.loads()

json.loads() 是Python標準庫 json 模塊中的一個函數(shù),用于將JSON格式的字符串解析(解碼)成Python對象。這個過程是反序列化的一部分,即將數(shù)據(jù)從一種格式(在這個情況下是JSON字符串)轉(zhuǎn)換成另一種格式(在這個情況下是Python的數(shù)據(jù)結(jié)構(gòu),如字典或列表)。

參數(shù)

  • s (str): 要解碼的JSON字符串。
  • *, **kwargs: 其他可選參數(shù),用于指定解碼行為,如 object_hook, parse_float, parse_int, parse_constant, object_pairs_hook, json_loads 等。這些參數(shù)允許用戶自定義解碼過程,例如將JSON對象轉(zhuǎn)換成特定的Python對象類型。

返回值

Python對象:通常是字典(對應于JSON對象)或列表(對應于JSON數(shù)組)。如果JSON字符串表示的是其他類型(如字符串、數(shù)字、布爾值、null),則返回相應的Python類型。

示例

import json  
  
# 一個簡單的JSON字符串  
json_str = '{"name": "Alice", "age": 30, "is_student": false}'  
  
# 使用json.loads()將JSON字符串解析成Python對象  
python_obj = json.loads(json_str)  
  
# 打印解析后的Python對象  
print(python_obj)  # 輸出: {'name': 'Alice', 'age': 30, 'is_student': False}  
  
# 訪問解析后的對象屬性  
print(python_obj['name'])  # 輸出: Alice  
print(python_obj['age'])   # 輸出: 30  
print(python_obj['is_student'])  # 輸出: False

注意事項

  • JSON字符串必須使用雙引號(")來包圍鍵和字符串值。如果使用單引號('),則會導致解碼錯誤。
  • JSON中的布爾值 true 和 false 會被轉(zhuǎn)換成Python中的 True 和 False。
  • JSON中的 null 會被轉(zhuǎn)換成Python中的 None。
  • 如果JSON字符串格式不正確(例如缺少引號、括號不匹配等),json.loads() 會拋出一個 json.JSONDecodeError 異常。

json.dumps()

json.dumps() 是Python標準庫 json 模塊中的一個函數(shù),用于將Python對象編碼(序列化)成JSON格式的字符串。這個過程是序列化的一部分,即將數(shù)據(jù)從一種格式(在這個情況下是Python的數(shù)據(jù)結(jié)構(gòu),如字典或列表)轉(zhuǎn)換成另一種格式(在這個情況下是JSON字符串)。

參數(shù)

  • obj (any): 要編碼的Python對象。它通常是字典(對應于JSON對象)或列表(對應于JSON數(shù)組),但也可以是其他類型,如字符串、數(shù)字、布爾值、None等。
  • skipkeys (bool, optional): 默認為False。如果字典的鍵不是基本類型(即str, int, float, bool, None),則設(shè)置為True可以跳過這些鍵;否則將引發(fā)TypeError。
  • ensure_ascii (bool, optional): 默認為True。如果設(shè)置為False,則嘗試將非ASCII字符(如中文)輸出為\uXXXX形式的Unicode轉(zhuǎn)義字符之外的字符。請注意,這可能會產(chǎn)生不可讀的輸出在非ASCII平臺的print函數(shù)中,因為print函數(shù)可能會使用系統(tǒng)默認的編碼來解碼字節(jié)字符串。在Python 3.x中,字符串是Unicode的,所以這個選項主要影響字節(jié)字符串的輸出。
  • check_circular (bool, optional): 默認為True。如果設(shè)置為False,則跳過對容器類型的循環(huán)引用的檢查(這可能會引發(fā)OverflowError)。
  • allow_nan (bool, optional): 默認為True。如果設(shè)置為False,則序列化過程中會將浮點數(shù)中的NaN、Infinity和-Infinity轉(zhuǎn)換為null。
  • sort_keys (bool, optional): 默認為False。如果設(shè)置為True,則字典的鍵會按照鍵的Unicode碼點排序。
  • indent (int or str, optional): 如果指定為整數(shù),則使用指定的縮進級別來美化輸出的JSON字符串。如果指定為字符串(如\t),則使用該字符串作為縮進字符。
  • separators (tuple, optional): 一個(item_separator, key_separator)元組,用于指定分隔符。默認為(', ', ‘: ‘)。如果指定為(’,’, ‘:’),則輸出的字符串會更緊湊。
  • default (function, optional): 一個函數(shù),用于將不可序列化的對象轉(zhuǎn)換為一個可序列化的表示。默認情況下,不可序列化的對象會引發(fā)TypeError。
    *, **kwargs: 其他可選參數(shù),用于進一步定制序列化行為。

返回值

str: 編碼后的JSON格式的字符串。

示例

import json  
  
# 一個簡單的Python對象(字典)  
python_obj = {'name': 'Alice', 'age': 30, 'is_student': False}  
  
# 使用json.dumps()將Python對象編碼成JSON字符串  
json_str = json.dumps(python_obj)  
  
# 打印編碼后的JSON字符串  
print(json_str)  # 輸出: '{"name": "Alice", "age": 30, "is_student": false}'  
  
# 使用indent參數(shù)來美化輸出  
pretty_json_str = json.dumps(python_obj, indent=4)  
print(pretty_json_str)  
# 輸出:  
# {  
#     "name": "Alice",  
#     "age": 30,  
#     "is_student": false  
# }

注意事項

  • 編碼后的JSON字符串使用雙引號(")來包圍鍵和字符串值。
  • Python中的布爾值 True 和 False 會被轉(zhuǎn)換成JSON中的 true 和 false。
  • Python中的 None 會被轉(zhuǎn)換成JSON中的 null。
  • 如果Python對象包含無法直接轉(zhuǎn)換成JSON的類型(如自定義對象),則可以使用default參數(shù)來提供一個自定義的序列化函數(shù)。
  • json.dumps() 不會直接寫入文件;要將JSON字符串寫入文件,請使用json.dump()方法。

json.load()

json.load() 是Python標準庫 json 模塊中的一個函數(shù),用于從文件中讀取JSON格式的數(shù)據(jù),并將其解析(解碼)成Python對象。這個過程是反序列化的一部分,即將數(shù)據(jù)從一種格式(在這個情況下是JSON文件)轉(zhuǎn)換成另一種格式(在這個情況下是Python的數(shù)據(jù)結(jié)構(gòu),如字典或列表)。

參數(shù)

  • fp (file-like object): 一個文件對象,它應該是一個支持.read()方法的對象,并且包含JSON格式的數(shù)據(jù)。這通常是一個打開的文件,但也可以是任何實現(xiàn)了文件接口的對象。
  • *, **kwargs: 其他可選參數(shù),用于指定解碼行為,如 object_hook, parse_float, parse_int, parse_constant, object_pairs_hook, cls 等。這些參數(shù)允許用戶自定義解碼過程,例如將JSON對象轉(zhuǎn)換成特定的Python對象類型。

返回值

Python對象:通常是字典(對應于JSON對象)或列表(對應于JSON數(shù)組)。如果JSON文件表示的是其他類型(如字符串、數(shù)字、布爾值、null),則返回相應的Python類型。

示例

import json  
  
# 假設(shè)有一個名為'data.json'的文件,內(nèi)容如下:  
# {  
#     "name": "Alice",  
#     "age": 30,  
#     "is_student": false  
# }  
  
# 打開JSON文件并讀取數(shù)據(jù)  
with open('data.json', 'r', encoding='utf-8') as f:  
    python_obj = json.load(f)  
  
# 打印解析后的Python對象  
print(python_obj)  # 輸出: {'name': 'Alice', 'age': 30, 'is_student': False}  
  
# 訪問解析后的對象屬性  
print(python_obj['name'])  # 輸出: Alice

注意事項

  • 文件應該以讀取模式(‘r’)打開,并且通常應該指定文件的編碼(如’utf-8’),以確保正確讀取文件中的字符。
  • JSON文件中的字符串必須使用雙引號(")來包圍鍵和字符串值。
  • 如果JSON文件格式不正確(例如缺少引號、括號不匹配等),json.load() 會拋出一個 json.JSONDecodeError 異常。
  • json.load() 直接從文件中讀取并解析JSON數(shù)據(jù),而不需要先將文件內(nèi)容讀入一個字符串變量。

json.dump()

json.dump() 是Python標準庫 json 模塊中的一個函數(shù),用于將Python對象編碼(序列化)成JSON格式,并將結(jié)果寫入到一個文件中。這個過程是序列化的一部分,即將數(shù)據(jù)從一種格式(在這個情況下是Python的數(shù)據(jù)結(jié)構(gòu),如字典或列表)轉(zhuǎn)換成另一種格式(在這個情況下是JSON文件)。

參數(shù)

  • obj (any): 要編碼的Python對象。它通常是字典(對應于JSON對象)或列表(對應于JSON數(shù)組),但也可以是其他類型,如字符串、數(shù)字、布爾值、None等。
  • fp (file-like object): 一個文件對象,它應該是一個支持.write()方法的對象,用于寫入JSON格式的數(shù)據(jù)。這通常是一個打開的文件,但也可以是任何實現(xiàn)了文件接口的對象。
  • skipkeys (bool, optional): 默認為False。如果字典的鍵不是基本類型(即str, int, float, bool, None),則設(shè)置為True可以跳過這些鍵;否則將引發(fā)TypeError。
  • ensure_ascii (bool, optional): 默認為True。如果設(shè)置為False,則嘗試將非ASCII字符(如中文)輸出為\uXXXX形式的Unicode轉(zhuǎn)義字符之外的字符。請注意,在寫入文件時,這通常不是問題,因為文件可以保存任何字節(jié)。但是,如果文件被當作文本文件處理(例如,在某些編輯器或查看器中打開),則可能需要確保文件的編碼與ensure_ascii=False時寫入的字符相匹配。
  • check_circular (bool, optional): 默認為True。如果設(shè)置為False,則跳過對容器類型的循環(huán)引用的檢查(這可能會引發(fā)OverflowError)。
  • allow_nan (bool, optional): 默認為True。如果設(shè)置為False,則序列化過程中會將浮點數(shù)中的NaN、Infinity和-Infinity轉(zhuǎn)換為null。
  • sort_keys (bool, optional): 默認為False。如果設(shè)置為True,則字典的鍵會按照鍵的Unicode碼點排序后寫入文件。
  • indent (int or str, optional): 如果指定為整數(shù),則使用指定的縮進級別來美化輸出的JSON。如果指定為字符串(如\t),則使用該字符串作為縮進字符。
  • separators (tuple, optional): 一個(item_separator, key_separator)元組,用于指定分隔符。默認為(', ', ‘: ‘)。如果指定為(’,’, ‘:’),則輸出的字符串會更緊湊。
  • default (function, optional): 一個函數(shù),用于將不可序列化的對象轉(zhuǎn)換為一個可序列化的表示。默認情況下,不可序列化的對象會引發(fā)TypeError。
    *, **kwargs: 其他可選參數(shù),用于進一步定制序列化行為。

返回值

None:json.dump() 不返回任何值,它將編碼后的JSON數(shù)據(jù)直接寫入到提供的文件對象中。

示例

import json  
  
# 一個簡單的Python對象(字典)  
python_obj = {'name': 'Alice', 'age': 30, 'is_student': False}  
  
# 打開一個文件以寫入JSON數(shù)據(jù)  
with open('output.json', 'w', encoding='utf-8') as f:  
    json.dump(python_obj, f)  
  
# 現(xiàn)在'output.json'文件包含了編碼后的JSON數(shù)據(jù)

注意事項

  • 文件應該以寫入模式(‘w’、‘a’等)打開,并且通常應該指定文件的編碼(如’utf-8’),以確保正確寫入文件中的字符。
  • 如果ensure_ascii設(shè)置為False,并且文件中包含非ASCII字符,請確保文件的編碼與這些字符相匹配,否則在某些環(huán)境中可能會出現(xiàn)亂碼。
  • json.dump() 直接將Python對象編碼成JSON格式并寫入文件,而不需要先將數(shù)據(jù)轉(zhuǎn)換成字符串。
  • 如果提供的文件對象不支持.write()方法,json.dump() 會拋出一個異常。

到此這篇關(guān)于Python中JSON使用方式的超詳細教程的文章就介紹到這了,更多相關(guān)Python JSON內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python統(tǒng)計單詞出現(xiàn)的次數(shù)

    Python統(tǒng)計單詞出現(xiàn)的次數(shù)

    最近經(jīng)理交給我一項任務,統(tǒng)計一個文件中每個單詞出現(xiàn)的次數(shù),列出出現(xiàn)頻率最多的5個單詞。本文給大家?guī)砹藀ython 統(tǒng)計單詞次數(shù)的思路解析,需要的朋友參考下吧
    2018-04-04
  • python解析命令行參數(shù)的三種方法詳解

    python解析命令行參數(shù)的三種方法詳解

    這篇文章主要介紹了python解析命令行參數(shù)的三種方法詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-11-11
  • Python中關(guān)于matplotlib圖片的灰度處理方式

    Python中關(guān)于matplotlib圖片的灰度處理方式

    這篇文章主要介紹了Python中關(guān)于matplotlib圖片的灰度處理方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • 利用PyTorch實現(xiàn)VGG16教程

    利用PyTorch實現(xiàn)VGG16教程

    這篇文章主要介紹了利用PyTorch實現(xiàn)VGG16教程,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-06-06
  • Python實現(xiàn)數(shù)據(jù)結(jié)構(gòu)線性鏈表(單鏈表)算法示例

    Python實現(xiàn)數(shù)據(jù)結(jié)構(gòu)線性鏈表(單鏈表)算法示例

    這篇文章主要介紹了Python實現(xiàn)數(shù)據(jù)結(jié)構(gòu)線性鏈表(單鏈表)算法,結(jié)合實例形式分析了Python單鏈表的定義、節(jié)點插入、刪除、打印等相關(guān)操作技巧,需要的朋友可以參考下
    2019-05-05
  • Python傳統(tǒng)圖像處理之皮膚區(qū)域檢測詳解

    Python傳統(tǒng)圖像處理之皮膚區(qū)域檢測詳解

    這篇文章主要介紹了在不同情景下對傳統(tǒng)圖像進行皮膚區(qū)域檢測,文章中的代碼具有一定的參考價值,感興趣的小伙伴可以跟隨小編一起來學習學習
    2021-12-12
  • django xadmin 管理器常用顯示設(shè)置方式

    django xadmin 管理器常用顯示設(shè)置方式

    這篇文章主要介紹了django xadmin 管理器常用顯示設(shè)置方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-03-03
  • Python and、or以及and-or語法總結(jié)

    Python and、or以及and-or語法總結(jié)

    這篇文章主要介紹了Python and、or以及and-or語法總結(jié),本文分別給出實例講解它們的使用方法,需要的朋友可以參考下
    2015-04-04
  • Apache,wsgi,django 程序部署配置方法詳解

    Apache,wsgi,django 程序部署配置方法詳解

    這篇文章主要介紹了Apache,wsgi,django 程序部署配置方法,結(jié)合實例形式詳細分析了Linux環(huán)境下Apache,wsgi,django程序部署配置的相關(guān)操作技巧與注意事項,需要的朋友可以參考下
    2019-07-07
  • python中的進度條工具tqdm及用法示例

    python中的進度條工具tqdm及用法示例

    tqdm 是 Python 中一個非常流行的進度條工具,常用于長時間運行的任務,如數(shù)據(jù)處理、訓練機器學習模型等,下面是 tqdm 的詳細介紹及一些常見用法示例,感興趣的朋友一起看看吧
    2024-06-06

最新評論

江陵县| 通江县| 巴中市| 万全县| 手游| 繁昌县| 池州市| 偃师市| 荔浦县| 岳池县| 昌邑市| 临漳县| 榆社县| 蓬溪县| 兴海县| 金塔县| 柯坪县| 巴塘县| 格尔木市| 宜宾市| 阿拉善左旗| 泸溪县| 九江市| 洱源县| 荣昌县| 台南县| 邻水| 廉江市| 衡山县| 敖汉旗| 都江堰市| 娄底市| 乡宁县| 犍为县| 新民市| 江口县| 陈巴尔虎旗| 柘荣县| 长海县| 沙湾县| 康保县|