Python中的JSON庫,詳細介紹與代碼示例

目錄

1. 前言

2. json 庫基本概念

3. json 的適應場景

4. json 庫的基本用法

4.1 導 json入 模塊

4.2 將 Python 對象轉換為 JSON 字符串

4.3 將 JSON 字符串轉換為 Python 對象

4.4 將 Python 對象寫入 JSON 文件

4.5 從 JSON 文件讀取數據

4.6 json 的其他方法

5. json 庫的高級用法

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

5.2 處理非 ASCII 字符

5.3 使用 indent 參數美化輸出

6. json 庫的異常處理

6.1 常見的異常類型

6.2 異常處理示例

7. 總結


1. 前言

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

2. json 庫基本概念

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

JSON 數據結構主要包括以下兩種基本類型:

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

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

json 庫的核心功能就是實現 Python 數據類型與 JSON 數據類型的相互轉換。

3. json 的適應場景

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

  • 數據交換 :在不同的系統或組件之間傳遞數據,特別是在 開 Web發中,前后端之間常用 JSON 格式進行數據交互。

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

4. json 庫的基本用法

4.1 導 json入 模塊

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

import json

4.2 將 Python 對象轉換為 JSON 字符串

使用 json.dumps() 方法將可以 Python 對象(如字典、列表等)轉換為 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 是要轉換的 Python 對象,其他參數用于控制轉換過程中的各種選項。

示例

data = {"name": "John","age": 03,"city": "New York"
}json_str = json.dumps(data)
print(json_str)

輸出結果:

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

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

4.3 將 JSON 字符串轉換為 Python 對象

使用 json.loads() 方法可以將 JSON 格字符串式的轉換為 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))

輸出結果:

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

JSON 字符串被轉換為 字 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 文件讀取數據

使用 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)

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

示例

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

讀取 “data.json” 文件中的數據并打印出來。

4.6 json 的其他方法

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

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

  • json.JSONDecodeError:當解析 JSON 數據出錯時,會拋出這個異常,我們可以使用它來進行錯誤處理。

5. json 庫的高級用法

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

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

import jsonclass Person:def __init__(self, name, age):self.name = nameself.age = ageclass 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)

輸出結果:

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

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

5.2 處理非 ASCII 字符

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

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

輸出結果:

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

ensure_ascii 參數為 False 時,非 ASCII 字符會以原始形式輸出,這樣更便于閱讀和理解。

5.3 使用 indent 參數美化輸出

在調試或閱讀 JSON 數據時,我們可以通過設置 indent 參數來美化 JSON 輸出的格式,使其更易于和閱讀。indent 參數指定了縮進的空格數。

data = {"name": "John","age": 30,"hobbies": ["reading", "traveling", "sports"]
}json_str = json.dumps(data, indent=4)
print(json_str)

輸出結果:

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

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

6. json 庫的異常處理

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

6.1 常見的異常類型

  • json.JSONDecodeError:當解析 JSON 數據出錯時拋出,例如 JSON 格式不正確。

  • TypeError:當嘗試序列化一個不支持的數據類型時拋出。

6.2 異常處理示例

import jsonjson_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"發生錯誤:{e}")

輸出結果:

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

通過捕獲異常,我們可以及時發現并處理問題,避免程序崩潰。

7. 總結

json 庫作為 Python 的內置模塊,是我們在進行數據存儲、傳遞和交換時不可或缺的工具之一。其為我們提供了簡單而強大的工具來處理 JSON 數據。它不僅能夠輕松地實現 Python 對象與 JSON 數據之間的相互轉換,還提供了豐富的參數和方法來滿足各種復雜的需求。我是橙色小博,關注我,一起在人工智能領域學習進步!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/79563.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/79563.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/79563.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

網狐旗艦大聯盟組件源碼私測筆記:結構分層、UI重構與本地實操全流程

作為一套衍生于傳統網狐架構的源碼版本&#xff0c;大聯盟這套源碼組件可謂是在經典基礎上進行了深度重塑。與老版死板的框架風格不同&#xff0c;它不僅對界面做了大刀闊斧的重構&#xff0c;還在組件層級的組織上做了優化。本文將基于一整套源碼進行深度解析&#xff0c;強調…

STM32 PulseSensor心跳傳感器驅動代碼

STM32CubeMX中準備工作&#xff1a; 1、設置AD 通道 2、設置一個定時器中斷&#xff0c;間隔時間2ms&#xff0c;我這里采用的是定時器7 3、代碼優化01 PulseSensor.c文件 #include "main.h" #include "PulseSensor/PulseSensor.h"/******************…

C++項目容易犯錯的點

1. 矩陣q要先定義大小&#xff0c;再賦值。不可以直接賦值。下面這種方式是錯誤的Eigen::MatrixXd q&#xff1b;q<<1,2&#xff1b;正確的這樣的&#xff1a; Eigen::MatrixXd q(2,1); q<<1.4, 1.5; 2. 不要重復加載variables.h頭文件&#xff0c;這樣變量會被…

在阿里云 Ubuntu 24.04 上部署 RabbitMQ:一篇實戰指南

前言 RabbitMQ 是業界常用的開源消息中間件,支持 AMQP 協議,易于部署、高可用、插件豐富。本文以阿里云 ECS 上運行的 Ubuntu 24.04 LTS 為例,手把手帶你完成 RabbitMQ 從倉庫配置到運行的全流程,并分享在國內環境下常見的坑與對應解決方案。 環境概況 操作系統:Ubuntu …

【論文筆記】SOTR: Segmenting Objects with Transformers

【題目】&#xff1a;SOTR: Segmenting Objects with Transformers 【引用格式】&#xff1a;Guo R, Niu D, Qu L, et al. Sotr: Segmenting objects with transformers[C]//Proceedings of the IEEE/CVF international conference on computer vision. 2021: 7157-7166. 【網…

MinIO實現https訪問

Windows下實現MinIO的https訪問. 首先需要自己解決證書問題, 這里可以是個人證書 也可以是花錢買的證書. 現在使用個人開發者證書舉例子。 將證書數據解壓到你知道的目錄之下 然后直接使用命令啟動MinIO start minio.exe server --certs-dir D:\xxxxx\tools\certs …

基于 jQuery 實現靈活可配置的輸入框驗證功能

在 Web 表單開發中&#xff0c;輸入框驗證是保障數據準確性和安全性的關鍵環節。無論是用戶注冊、信息提交還是數據錄入場景&#xff0c;都需要對用戶輸入內容進行合法性檢查。本文將介紹如何使用 HTML、CSS 和 jQuery 構建一個可靈活配置的輸入框驗證系統&#xff0c;輕松應對…

Kotlin 04Flow stateIn 和 shareIn的區別

一 Kotlin Flow 中的 stateIn 和 shareIn 一、簡單比喻理解 想象一個水龍頭&#xff08;數據源&#xff09;和幾個水杯&#xff08;數據接收者&#xff09;&#xff1a; 普通 Flow&#xff08;冷流&#xff09;&#xff1a;每個水杯來接水時&#xff0c;都要重新打開水龍頭從…

WebRTC 服務器之SRS服務器概述和環境搭建

1.概述 SRS&#xff08;Simple Realtime Server&#xff09;是一款高性能、跨平臺的流媒體服務器&#xff0c;支持多種協議&#xff0c;包括 RTMP、WebRTC、HLS、HTTP-FLV、SRT、MPEG-DASH 和 GB28181。本文介紹了 SRS&#xff0c;包括其用途、關鍵功能、架構和支持協議。SRS 旨…

Dify - Embedding Rerank

注意&#xff1a;v100顯卡會出現不適配&#xff0c;不推薦使用 1. 安裝 Docker ubuntu 22.04 docker 安裝&使用_ubuntu22.04 安裝docker-CSDN博客 2. 安裝vllm pip install -U xformers torch torchvision torchaudio triton --index-url https://download.pytorch.org/w…

LeetCode:鏈表的中間結點

1、題目描述 給你單鏈表的頭結點 head &#xff0c;請你找出并返回鏈表的中間結點。 如果有兩個中間結點&#xff0c;則返回第二個中間結點。 示例 1&#xff1a; 輸入&#xff1a;head [1,2,3,4,5] 輸出&#xff1a;[3,4,5] 解釋&#xff1a;鏈表只有一個中間結點&#xff…

LabVIEW溫控系統熱敏電阻滯后問題

在 LabVIEW 構建的溫控系統中&#xff0c;熱敏電阻因熱時間常數大&#xff08;2 秒左右&#xff09;產生的滯后效應&#xff0c;致使控溫出現超調與波動。在不更換傳感器的前提下&#xff0c;可從算法優化、硬件調整和系統設計等維度著手解決。 ? 一、算法優化? 1. 改進 PI…

技術犯規計入個人犯規嗎·棒球1號位

在棒球運動中&#xff0c;雖然沒有“技術犯規”這一特定術語&#xff0c;但存在多種違規行為或違反規則的情況&#xff0c;通常會導致判罰或處罰。以下是常見的違規行為及相關規則&#xff1a; 1. 投手違規&#xff08;Balk&#xff09; 定義&#xff1a;投手在壘上有跑壘員時…

Python核心技巧 類與實例:面向對象編程的基石

、核心概念圖解 &#x1f3af; 類 vs 實例 類&#xff1a;對象的藍圖&#xff08;如"汽車設計圖"&#xff09; 實例&#xff1a;類的具體實現&#xff08;如"你的特斯拉Model 3"&#xff09; class MyClass: # 類聲明 count 0 # 類…

協程補充---viewModelScope 相關知識點

viewModelScope.launch 默認在 Dispatchers.Default 線程池執行Dispatchers.Default 是一個后臺線程池&#xff0c;專門用于 CPU 密集型任務如果需要在主線程執行&#xff0c;必須顯式指定 Dispatchers.Main remember 是 Compose 的狀態管理函數(queueMenus) 是依賴項&#xff…

linux stm32mp157 GIC-V2 中斷處理過程分析

/* ** 中斷觸發時&#xff0c;調用的 handle_arch_irq 入口地址。 ** 因為此時&#xff0c;掛接的就是 gic_handle_irq 函數&#xff01;gic_handle_irq 是個全局函數指針&#xff0c; ** static void __exception_irq_entry gic_handle_irq(struct pt_regs *regs) ** 它是Lin…

動態指令參數:根據組件狀態調整指令行為

&#x1f90d; 前端開發工程師、技術日更博主、已過CET6 &#x1f368; 阿珊和她的貓_CSDN博客專家、23年度博客之星前端領域TOP1 &#x1f560; 牛客高級專題作者、打造專欄《前端面試必備》 、《2024面試高頻手撕題》、《前端求職突破計劃》 &#x1f35a; 藍橋云課簽約作者、…

直方圖比較

目錄 1、直方圖比較的概念 2、直方圖比較的主要原因 3、典型應用場景 4、基礎直方圖比較 5、多通道直方圖比較 6、實時直方圖檢測 1、直方圖比較的概念 直方圖比較是通過數學方法計算兩個直方圖之間的相似度或差異度的技術。在計算機視覺中&#xff0c;直方圖是對圖像特征…

Windows11 VS code 安裝 Cline 調用 Github MCP 配置過程坑點匯總

背景 為了調研 MCP 在 windows 上如何使用本地的命令執行一些操作而實現自動化的過程&#xff0c;在 B 站視頻的指導下&#xff0c;進行相應填坑過程&#xff0c;最終運行起來&#xff0c;并實現 github 自動化編程并提交代碼的過程。 B 站 Cline 視頻演示 Cline Cline 是一…

kdump詳解

kdump 是 Linux 系統中的一種內核崩潰轉儲機制&#xff0c;用于在系統崩潰時將內存中的數據保存到磁盤上&#xff0c;以便后續分析系統崩潰的原因。以下是對 kdump 的詳細介紹&#xff1a; 1、工作原理 kdump 利用了 Linux 系統中的雙啟動機制。當系統啟動時&#xff0c;它會…