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

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

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

引言

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

一、JSON簡(jiǎn)介

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

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

  • 對(duì)象 (Object): 用花括號(hào) {} 包圍,包含零個(gè)或多個(gè)鍵值對(duì),鍵是字符串,值可以是任何有效的 JSON 數(shù)據(jù)類型。
  • 數(shù)組 (Array): 用方括號(hào) [] 包圍,包含零個(gè)或多個(gè)值,值之間用逗號(hào)分隔。
  • 字符串 (String): 用雙引號(hào) "" 包圍的字符序列。
  • 數(shù)字 (Number): 整數(shù)或浮點(diǎn)數(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)工具。它提供了四個(gè)核心函數(shù)用于在 JSON 字符串/文件和 Python 對(duì)象之間進(jìn)行轉(zhuǎn)換:

2.1 json.load()

從 JSON文件對(duì)象讀取并解析為Python 對(duì)象。

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

2.2 json.loads()

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

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

2.4 json.dumps()

將 Python 對(duì)象 編碼為 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 對(duì)象與 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 對(duì)應(yīng) Python 的 None。
  • JSON 的 true/false 對(duì)應(yīng) Python 的 True/False。

四、異常處理

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

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

exception json.JSONDecodeError(msg, doc, pos)

額外的屬性:

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

示例:

新建一個(gè)bad.json文件:

{
  "name": "Alice",
  "age": 30,  // 這里多了一個(gè)逗號(hào)
}

嘗試解析它:

import json

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

可能的輸出:

錯(cuò)誤消息: Expecting property name enclosed in double quotes
錯(cuò)誤位置: 第 3 行, 第 2 列
錯(cuò)誤索引: 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é)果,驗(yàn)證數(shù)據(jù)類型和內(nèi)容
    print("=== 解析結(jié)果 ===")
    print("原始數(shù)據(jù)類型:", type(data)) # <class 'list'>
    print("解析后的數(shù)據(jù) (Python 列表):")
    print(data)
    print("\n") 

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

except FileNotFoundError:
    print(f"錯(cuò)誤:找不到文件 '{filename}'。")
    print("請(qǐng)確保 'people.json' 文件存在于當(dāng)前目錄,或者檢查文件名是否正確。")
except Exception as e:
    print(f"發(fā)生未知錯(cuò)誤: {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)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

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

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

    這篇文章主要介紹了如何使用Python進(jìn)行PDF圖片識(shí)別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)計(jì)的方法

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

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

    python3 線性回歸驗(yàn)證方法

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

    python 名稱空間與作用域詳情

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

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

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

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

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

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

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

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

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

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

    Pycharm小白級(jí)簡(jiǎn)單使用教程

    pycharm是一種Python IDE,能夠幫助我們?cè)诰帉懘a時(shí)提高效率。 這篇文章主要介紹了Pycharm小白級(jí)簡(jiǎn)單使用教程,需要的朋友可以參考下
    2020-01-01

最新評(píng)論

镇安县| 诸暨市| 深泽县| 隆安县| 亚东县| 牟定县| 五莲县| 都昌县| 自治县| 保山市| 雅江县| 陇西县| 建德市| 仪征市| 定南县| 山西省| 蒲城县| 河西区| 平凉市| 望奎县| 宜君县| 姚安县| 宁乡县| 拜泉县| 仁布县| 文成县| 井研县| SHOW| 建水县| 新昌县| 若尔盖县| 达日县| 尼木县| 德惠市| 灌云县| 太康县| 扎鲁特旗| 柘荣县| 莆田市| 二连浩特市| 德昌县|