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

python進(jìn)階之JSON數(shù)據(jù)解析完整示例

 更新時間:2025年12月29日 08:22:51   作者:G-1科羅納  
Python作為一種強(qiáng)大的編程語言,提供了多種方法來處理JSON數(shù)據(jù),使其在數(shù)據(jù)解析、處理和生成方面變得異常簡便,這篇文章主要介紹了python進(jìn)階之JSON數(shù)據(jù)解析的相關(guān)資料,需要的朋友可以參考下

引言

在當(dāng)今數(shù)據(jù)驅(qū)動的世界中,JSON已成為數(shù)據(jù)交換的事實標(biāo)準(zhǔn)。無論是與 Web API 交互、配置應(yīng)用程序、存儲結(jié)構(gòu)化數(shù)據(jù),還是處理來自物聯(lián)網(wǎng)設(shè)備的數(shù)據(jù),幾乎不可避免地會遇到 JSON 格式。

一、JSON簡介

JSON(JavaScript Object Notation)是一種輕量級的、基于文本的數(shù)據(jù)交換格式。它被設(shè)計為易于人閱讀和編寫,同時也易于機(jī)器解析和生成,被廣泛應(yīng)用于各種編程語言和平臺之間。

JSON 數(shù)據(jù)由鍵值對組成,支持以下幾種基本數(shù)據(jù)類型

  • 對象 (Object): 用花括號 {} 包圍,包含零個或多個鍵值對,鍵是字符串,值可以是任何有效的 JSON 數(shù)據(jù)類型。
  • 數(shù)組 (Array): 用方括號 [] 包圍,包含零個或多個值,值之間用逗號分隔。
  • 字符串 (String): 用雙引號 "" 包圍的字符序列。
  • 數(shù)字 (Number): 整數(shù)或浮點數(shù)。
  • 布爾值 (Boolean): true 或 false
  • 空值 (Null): null

例如:

people.json文件:

[
  {
    "name": "張三",
    "gender": "男",
    "age": 25
  },
  {
    "name": "李四",
    "gender": "女",
    "age": 23
  }
]

二、python中JSON模塊

Python 的 JSON模塊是處理 JSON 數(shù)據(jù)的標(biāo)準(zhǔn)工具。它提供了四個核心函數(shù)用于在 JSON 字符串/文件和 Python 對象之間進(jìn)行轉(zhuǎn)換:

2.1 json.load()

從 JSON文件對象讀取并解析為Python 對象。

json.load(fp, *, cls=None, object_hook=None, parse_float=None, 
            parse_int=None, parse_constant=None, object_pairs_hook=None, **kw)
  • 參數(shù):
    • fp: 一個支持 .read() 方法的文本文件對象,數(shù)據(jù)從這個文件對象中讀取。
    • cls (可選): 用于自定義 JSON 解碼器的類。通常用于處理復(fù)雜的對象。
    • object_hook (可選): 一個函數(shù),用于在解碼每個 JSON 對象后進(jìn)行自定義處理。它接收一個字典作為參數(shù),并應(yīng)返回一個對象(通常是字典或自定義對象)。
    • parse_float (可選): 一個函數(shù),用于將 JSON 中的浮點數(shù)字符串轉(zhuǎn)換為 Python 對象。默認(rèn)是 float
    • parse_int (可選): 一個函數(shù),用于將 JSON 中的整數(shù)字符串轉(zhuǎn)換為 Python 對象。
    • parse_constant (可選): 一個函數(shù),用于處理 JSON 常量 ('-Infinity''Infinity''NaN')。
    • object_pairs_hook (可選): 一個函數(shù),接收一個由 (key, value) 對組成的列表,并返回一個對象。object_pairs_hook 優(yōu)先于 object_hook
    • **kw (可選): 其他關(guān)鍵字參數(shù)。
  • 返回值: 一個 Python 對象(通常是 dict 或 list)。

2.2 json.loads()

 從JSON 字符串(str)讀取并解析為 Python 對象。

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

參數(shù)同json.dump。

2.3 json.load()

將 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)
  • 參數(shù):
    • obj: 一個必需的參數(shù)。要序列化的 Python 對象。它必須是 dictlisttuplestrintfloatboolNone,或者是一個實現(xiàn)了 __json__() 方法的對象。
    • fp: 一個必需的參數(shù)。一個支持 .write() 方法的文本文件對象(通常由 open() 函數(shù)返回,模式為 'w' 或 'a')。JSON 數(shù)據(jù)將寫入這個文件對象。
    • skipkeys (可選): 如果為 True,當(dāng)字典的鍵不是基本類型(strintfloatboolNone)時,會自動跳過該鍵值對,而不是引發(fā) TypeError。
    • ensure_ascii (可選): 如果為 True,輸出將確保所有非 ASCII 字符都被轉(zhuǎn)義。如果為 False,則允許直接輸出這些字符(通常用于生成人類可讀的文件)。
    • check_circular (可選): 如果為 True,會檢查容器類型的循環(huán)引用(如列表包含自身),如果發(fā)現(xiàn)則引發(fā) ValueError。如果為 False,則不檢查,但遇到循環(huán)引用時行為未定義。
    • allow_nan (可選): 如果為 True,允許 float 類型的 NaNInfinity-Infinity。如果為 False,則在序列化這些值時會引發(fā) ValueError。
    • cls (可選): 用于自定義 JSON 編碼器的類。
    • indent (可選): 用于美化輸出。如果是一個非負(fù)整數(shù)或字符串(如 '\t'),則 JSON 數(shù)組元素和對象成員將被換行并使用該值進(jìn)行縮進(jìn),使其更易讀。None(默認(rèn))表示單行輸出。
    • separators (可選): 一個 (item_separator, key_separator) 元組。默認(rèn)是 (', ', ': ')??梢栽O(shè)置為 (',', ':') 以減少輸出大?。ㄈコ崭瘢?。
    • default (可選): 一個函數(shù),用于處理 json 模塊無法序列化的對象。該函數(shù)應(yīng)返回一個可序列化的對象,或者引發(fā) TypeError。
    • sort_keys (可選): 如果為 True,則字典的輸出將按鍵的字符串表示進(jìn)行排序。
    • **kw (可選): 其他關(guān)鍵字參數(shù)。
  • 返回值: 無 (None)。

2.4 json.dumps()

將 Python 對象 編碼為 JSON 字符串(str)。

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)

參數(shù)同json.dump。

三、數(shù)據(jù)格式轉(zhuǎn)換規(guī)則

Python 對象與 JSON 值之間的轉(zhuǎn)換規(guī)則是數(shù)據(jù)處理的關(guān)鍵。

Python-JSON 數(shù)據(jù)類型映射表

JSON

Python

object

dict

array

list

string

str

number (int)

int

number (real)

float

true

True

false

False

null

None

注意:

  • JSON 的 null 對應(yīng) Python 的 None。
  • JSON 的 true/false 對應(yīng) Python 的 True/False

四、異常處理

JSONDecodeErrorValueError 的一個子類,提供了更豐富的錯誤信息,當(dāng)解析 JSON 文檔時發(fā)生錯誤(即 JSON 格式不正確)時會引發(fā)此異常,這對于調(diào)試 JSON 格式問題非常有幫助。

(該異常在 Python 3.5 版本中添加)

exception json.JSONDecodeError(msg, doc, pos)

額外的屬性:

  • msg: 未格式化的錯誤消息(即描述錯誤原因的文本)。
  • doc: 正在被解析的原始 JSON 文檔(字符串)。
  • pos: 在 doc 字符串中,解析失敗開始的索引位置(從 0 開始的字符位置)。
  • lineno: 與 pos 位置對應(yīng)的行號(從 1 開始計數(shù))。
  • colno: 與 pos 位置對應(yīng)的列號(從 1 開始計數(shù))。

示例:

新建一個bad.json文件:

{
  "name": "Alice",
  "age": 30,  // 這里多了一個逗號
}

嘗試解析它:

import json

try:
    with open('bad.json', 'r') as file:
        data = json.load(file)
except json.JSONDecodeError as e:
    print(f"錯誤消息: {e.msg}")
    print(f"錯誤位置: 第 {e.lineno} 行, 第 {e.colno} 列")
    print(f"錯誤索引: {e.pos}")
    # 如果需要,可以打印整個文檔或相關(guān)部分
    # print(f"文檔: {e.doc}")

可能的輸出:

錯誤消息: Expecting property name enclosed in double quotes
錯誤位置: 第 3 行, 第 2 列
錯誤索引: 35

五、完整示例

解析第一章節(jié)中的people.json文件:

import json

# 1. 定義文件名
filename = 'people.json'
try:
    # 2. 打開文件并讀取
    with open(filename, 'r', encoding='utf-8') as file:
        # 3. 使用 json.load() 解析文件內(nèi)容
        data = json.load(file)
    
    # 4. 打印解析結(jié)果,驗證數(shù)據(jù)類型和內(nèi)容
    print("=== 解析結(jié)果 ===")
    print("原始數(shù)據(jù)類型:", type(data)) # <class 'list'>
    print("解析后的數(shù)據(jù) (Python 列表):")
    print(data)
    print("\n") 

    # 5. 訪問和使用數(shù)據(jù)
    print("=== 信息 ===")
    for person in data:
        print(f"{person['name']} - {person['gender']}, {person['age']}歲")

except FileNotFoundError:
    print(f"錯誤:找不到文件 '{filename}'。")
    print("請確保 'people.json' 文件存在于當(dāng)前目錄,或者檢查文件名是否正確。")
except Exception as e:
    print(f"發(fā)生未知錯誤: {e}")

結(jié)果:

=== 解析結(jié)果 ===
原始數(shù)據(jù)類型: <class 'list'>
解析后的數(shù)據(jù) (Python 列表):
[{'name': '張三', 'gender': '男', 'age': 25}, {'name': '李四', 'gender': '女', 'age': 23}]

=== 信息 ===
張三 - 男, 25歲
李四 - 女, 23歲

參考

到此這篇關(guān)于python進(jìn)階之JSON數(shù)據(jù)解析的文章就介紹到這了,更多相關(guān)python JSON數(shù)據(jù)解析內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 如何使用Python進(jìn)行PDF圖片識別OCR

    如何使用Python進(jìn)行PDF圖片識別OCR

    這篇文章主要介紹了如何使用Python進(jìn)行PDF圖片識別OCR,幫助大家更好的理解和使用python,感興趣的朋友可以了解下
    2021-01-01
  • pycharm導(dǎo)入源碼的具體步驟

    pycharm導(dǎo)入源碼的具體步驟

    在本篇內(nèi)容里小編給大家整理了關(guān)于pycharm導(dǎo)入源碼的具體步驟,有需要的朋友們可以參考學(xué)習(xí)下。
    2020-08-08
  • 將字典轉(zhuǎn)換為DataFrame并進(jìn)行頻次統(tǒng)計的方法

    將字典轉(zhuǎn)換為DataFrame并進(jìn)行頻次統(tǒng)計的方法

    下面小編就為大家分享一篇將字典轉(zhuǎn)換為DataFrame并進(jìn)行頻次統(tǒng)計的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-04-04
  • python3 線性回歸驗證方法

    python3 線性回歸驗證方法

    今天小編就為大家分享一篇python3 線性回歸驗證方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-07-07
  • python 名稱空間與作用域詳情

    python 名稱空間與作用域詳情

    這篇文章主要介紹了python 名稱空間與作用域詳情,函數(shù)內(nèi)部的函數(shù)只能在函數(shù)內(nèi)部調(diào)用,不能在函數(shù)外部調(diào)用,通過接下來的學(xué)習(xí)你將會知道為什么會出現(xiàn)這種情況。

    2021-10-10
  • opencv-python圖像配準(zhǔn)(匹配和疊加)的實現(xiàn)

    opencv-python圖像配準(zhǔn)(匹配和疊加)的實現(xiàn)

    圖像配準(zhǔn)需是指對不同條件下得到的兩幅或多幅圖像進(jìn)行匹配、疊加的過程。本文詳細(xì)的介紹了如何使用,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-06-06
  • Python用selenium實現(xiàn)自動登錄和下單的項目實戰(zhàn)

    Python用selenium實現(xiàn)自動登錄和下單的項目實戰(zhàn)

    本文主要介紹了Python用selenium實現(xiàn)自動登錄和下單的項目實戰(zhàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02
  • Python中執(zhí)行存儲過程及獲取存儲過程返回值的方法

    Python中執(zhí)行存儲過程及獲取存儲過程返回值的方法

    這篇文章主要介紹了Python中執(zhí)行存儲過程及獲取存儲過程返回值的方法,結(jié)合實例形式總結(jié)分析了Python調(diào)用存儲過程的常用方法與相關(guān)操作注意事項,需要的朋友可以參考下
    2017-10-10
  • 專家解析Python文件讀寫的理論與實踐(從基礎(chǔ)概念到工程應(yīng)用)

    專家解析Python文件讀寫的理論與實踐(從基礎(chǔ)概念到工程應(yīng)用)

    本文講解Python文件讀寫的基礎(chǔ)與工程實踐,從文件對象、打開與關(guān)閉、上下文管理,到文本與二進(jìn)制文件讀寫、文件指針、編碼問題及異常處理,輔以豐富代碼示例與性能、安全提示,通過日志分析工具的實際項目案例,展示大文件處理、流式讀取、隨機(jī)訪問和編碼容錯的應(yīng)用方法
    2026-01-01
  • Pycharm小白級簡單使用教程

    Pycharm小白級簡單使用教程

    pycharm是一種Python IDE,能夠幫助我們在編寫代碼時提高效率。 這篇文章主要介紹了Pycharm小白級簡單使用教程,需要的朋友可以參考下
    2020-01-01

最新評論

鹿邑县| 平湖市| 冀州市| 阿拉善盟| 武冈市| 台东县| 道真| 高要市| 葫芦岛市| 西充县| 德令哈市| 灯塔市| 玉环县| 北海市| 桑植县| 岑溪市| 防城港市| 稻城县| 格尔木市| 泾川县| 牟定县| 城固县| 商河县| 马龙县| 宜章县| 巴林左旗| 高雄县| 漯河市| 定远县| 若羌县| 台东县| 通州市| 绿春县| 于都县| 普安县| 宁阳县| 中山市| 清原| 文登市| 筠连县| 贡觉县|