Python(18)Python中JSON的妙用:詳解序列化與反序列化原理及實戰案例

目錄

      • 一、背景:為什么Python需要JSON?
      • 二、核心技術解析:序列化與反序列化
        • 2.1 核心概念
        • 2.2 類型映射對照表
      • 三、Python操作JSON的四大核心方法
        • 3.1 基礎方法庫
        • 3.2 方法詳解
          • 1. json.dumps()
          • 2. json.loads()
          • 3. json.dump()
          • 4. json.load()
      • 四、實戰進階案例
        • 4.1 自定義對象序列化
        • 4.2 復雜數據結構處理
        • 4.3 性能優化技巧
      • 五、最佳實踐總結
        • Python相關文章(推薦)

一、背景:為什么Python需要JSON?

?JSON(JavaScript Object Notation)?作為輕量級的數據交換格式,在Python開發中占據著不可替代的地位。根據2023年Stack Overflow調查報告,JSON在Web API領域的應用率高達89.3%,其核心優勢體現在:

  1. 跨平臺兼容性?:獨立于編程語言的通用格式
  2. 數據結構友好?:完美映射Python字典和列表
  3. 高效可讀性?:相比XML節省30%-50%的數據體積
  4. 網絡傳輸優化?:支持流式傳輸,降低帶寬消耗

當Python需要與Java服務通信或存儲配置信息時,JSON憑借其標準化結構,成為不同系統間數據交互的"通用貨幣"。

二、核心技術解析:序列化與反序列化

2.1 核心概念
  • 序列化(Serialization)?:將內存中的對象轉換為可存儲/傳輸的格式
Python對象 → JSON字符串
  • ?反序列化(Deserialization)?:將序列化數據還原為程序可操作的對象
JSON字符串 → Python對象
2.2 類型映射對照表
JSON類型Python類型
objectdict
arraylist
stringstr
numberint/float
trueTrue
falseFalse
nullNone

三、Python操作JSON的四大核心方法

3.1 基礎方法庫
import json
3.2 方法詳解
1. json.dumps()
# 將Python對象轉為JSON字符串
data = {"name": "Alice", "age": 28, "skills": ["Python", "SQL"]}
json_str = json.dumps(data, indent=2)
print(json_str)

輸出結果:

{"name": "Alice","age": 28,"skills": ["Python","SQL"]
}

?關鍵參數說明:?

indent:縮進量(美化輸出)
sort_keys:是否按鍵排序(默認False)
ensure_ascii:中文字符處理(默認True)

2. json.loads()
# 將JSON字符串轉為Python對象
received_data = '{"city": "Beijing", "population": 2154}'
py_dict = json.loads(received_data)
print(type(py_dict))  # <class 'dict'>
print(py_dict['population'])  # 2154
3. json.dump()
# 將對象序列化后寫入文件
config = {"debug_mode": False,"max_connections": 10,"timeout": 30.5
}with open('config.json', 'w', encoding='utf-8') as f:json.dump(config, f, ensure_ascii=False)
4. json.load()
# 從文件加載并反序列化
with open('config.json', 'r', encoding='utf-8') as f:loaded_config = json.load(f)print(loaded_config['timeout'])  # 30.5

四、實戰進階案例

4.1 自定義對象序列化
class User:def __init__(self, name, email):self.name = nameself.email = email# 自定義編碼器
class UserEncoder(json.JSONEncoder):def default(self, obj):if isinstance(obj, User):return {'name': obj.name, 'email': obj.email}return super().default(obj)user = User("Bob", "bob@example.com")
print(json.dumps(user, cls=UserEncoder))  # {"name": "Bob", "email": "bob@example.com"}
4.2 復雜數據結構處理
data = {"timestamp": datetime.datetime.now(),"metrics": {"CPU": 78.2,"Memory": 2048}
}# 使用lambda處理非標準類型
json_str = json.dumps(data, default=lambda o: o.isoformat() if isinstance(o, datetime.datetime) else o.__dict__)
4.3 性能優化技巧
# 使用ujson加速(性能提升3-5倍)
import ujsonlarge_data = [{"id": i} for i in range(100000)]
ujson.dumps(large_data)  # 比標準庫快3倍

五、最佳實踐總結

  1. 數據驗證?:使用JSON Schema進行格式校驗
  2. 編碼規范?:統一使用UTF-8編碼
  3. 安全注意?:避免直接加載不可信來源的JSON
  4. 性能選擇?:大數據量場景考慮orjson/ujson
  5. 版本兼容?:使用try-except處理字段缺失
序列化
網絡傳輸
反序列化
Python對象
JSON字符串
遠程服務
其他語言對象

通過掌握JSON的序列化技術,開發者可以:

  • 輕松實現微服務架構中的數據交換
  • 構建跨平臺的配置文件系統
  • 優化前后端分離架構的數據傳輸
  • 提升分布式系統的協作效率
Python相關文章(推薦)
Python全方位指南Python(1)Python全方位指南:定義、應用與零基礎入門實戰
Python基礎數據類型詳解Python(2)Python基礎數據類型詳解:從底層原理到實戰應用
Python循環Python(3)掌握Python循環:從基礎到實戰的完整指南
Python列表推導式Python(3.1)Python列表推導式深度解析:從基礎到工程級的最佳實踐
Python生成器Python(3.2)Python生成器深度全景解讀:從yield底層原理到萬億級數據處理工程實踐
Python函數編程性能優化Python(4)Python函數編程性能優化全指南:從基礎語法到并發調優
Python數據清洗Python(5)Python數據清洗指南:無效數據處理與實戰案例解析(附完整代碼)
Python郵件自動化Python(6)Python郵件自動化終極指南:從零搭建企業級郵件系統(附完整源碼)
Python通配符基礎Python(7)Python通配符完全指南:從基礎到高階模式匹配實戰(附場景化代碼)
Python通配符高階Python(7 升級)Python通配符高階實戰:從模式匹配到百萬級文件處理優化(附完整解決方案)
Python操作系統接口Python(8)Python操作系統接口完全指南:os模塊核心功能與實戰案例解析
Python代碼計算全方位指南Python(9)Python代碼計算全方位指南:從數學運算到性能優化的10大實戰技巧
Python數據類型Python(10)Python數據類型完全解析:從入門到實戰應用
Python判斷語句Python(11)Python判斷語句全面解析:從基礎到高級模式匹配
Python參數傳遞Python(12)深入解析Python參數傳遞:從底層機制到高級應用實踐
Python面向對象編程Python(13)Python面向對象編程入門指南:從新手到類與對象(那個她)的華麗蛻變
Python內置函數Python(14)Python內置函數完全指南:從基礎使用到高階技巧
Python參數傳遞與拷貝機制Python(15)Python參數傳遞與拷貝機制完全解析:從值傳遞到深拷貝實戰
Python文件操作Python(16)Python文件操作終極指南:安全讀寫與高效處理實踐
Python字符編碼Python(17)Python字符編碼完全指南:從存儲原理到亂碼終結實戰

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

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

相關文章

【物聯網】基于LORA組網的遠程環境監測系統設計

基于LORA組網的遠程環境監測系統設計 演示視頻: 簡介: 1.本系統有一個主機,兩個從機。 2.一主多從的LORA組網通信,主機和兩個從機都配備了STM32F103單片機與 LoRa 模塊,主機作為中心設備及WIFI網關,負責接收和發送數據到遠程物聯網平臺和手機APP,兩個從機則負責采集數…

通過金融科技(Fintech)掌控財務:智能理財管理指南

李升偉 編譯 在當今世界&#xff0c;科技幾乎重塑了我們生活的方方面面&#xff0c;包括金錢的管理方式。金融科技&#xff08;Fintech&#xff09;讓個人財務管理變得前所未有的便捷、高效和智能。從追蹤支出到投資理財、提升信用評分&#xff0c;金融科技工具賦予個人掌控財…

html-css樣式

1. 所有類型為文本的 元素的樣式 指定所有類型為文本的 元素的樣式 /* 文本框的樣式 */ input[type"text"] { font-size: 25px;width: 80px; /* 文本框的寬度 */ padding: 25px; } font-size&#xff1a;字體大小 width&#xff1a;文本框寬度 padding&#…

【C語言基礎】C++ 中的 `vector` 及其 C 語言實現詳解

一、C 中的 vector&#xff1a;動態數組的核心特性 1. 基本概念 vector 是 C 標準模板庫&#xff08;STL&#xff09;中的動態數組容器&#xff0c;支持自動擴容、高效元素訪問和豐富的操作接口。其核心特性包括&#xff1a; 動態內存管理&#xff1a;自動調整容量&#xff0…

nvm切換node版本后,解決npm找不到的問題

解決方法如下 命令行查看node版本 node -v找到node版本所對應的npm版本 點擊進入node版本 npm對應版本下載 點擊進入npm版本 下載Windows 壓縮包 下載完成后&#xff0c;解壓&#xff0c;文件改名為npm 復制到你nvm對應版本的node_modules 下面 將下載的npm /bin 目錄…

數據結構:最小生成樹的普里姆算法和克魯斯卡爾算法

對于一個帶權&#xff08;假設每條邊上的權均為大于零的實數&#xff09;連通無向圖 G 中的不同生成樹&#xff0c;其每棵樹的所有邊上的權值之和也可能不同&#xff1b;圖的所有生成樹中具有邊上的權值之和最小的樹稱為圖的最小生成樹&#xff08;Minimal Spanning Tree&#…

Information-Theoretic Limits of Bistatic Integrated Sensing and Communication

摘要 雙靜態感知指的是發射器&#xff08;照亮目標&#xff09;和感知接收器&#xff08;估計目標狀態&#xff09;在物理上分離的場景&#xff0c;這與發射和感知功能共存的單靜態感知形成對比。在實際場景中&#xff0c;雙靜態感知可能需要應對系統約束&#xff0c;或者作為…

XCTF-web(四)

unserialize3 需要反序列化一下&#xff1a;O:4:“xctf”:2:{s:4:“flag”;s:3:“111”;} php_rce 題目提示rce漏洞&#xff0c;測試一下&#xff1a;?s/Index/\think\app/invokefunction&functioncall_user_func_array&vars[0]phpinfo&vars[1][]1 flag&#xff1…

Java Stream深度解析 高階技巧與性能優化實戰

文章目錄 一、Stream底層機制揭秘1.1 Stream流水線架構1.2 Spliterator探秘 二、自定義收集器高級實現2.1 實現高性能統計收集器2.2 多級分組優化技巧 三、并行流深度優化3.1 并行度控制策略3.2 工作竊取(Work-Stealing)優化 四、無限流與短路操作4.1 生成無限質數流4.2 短路操…

TailwindCss快速上手

什么是Tailwind Css? 一個實用優先的 CSS 框架&#xff0c;可以直接在標記中組合以構建任何設計。 開始使用Tailwind Css 如何安裝 下面是使用vite構建工具的方法 ①安裝 Tailwind CSS: tailwindcss通過tailwindcss/vitenpm安裝。 npm install tailwindcss tailwindcss…

Web前端 (CSS篇)

什么是CSS&#xff1f; css(Cascading Style Sheets)是層疊樣式表或級聯樣式表&#xff0c;是一組設置規則&#xff0c;用于控制web頁面外觀。 為什么使用CSS? CSS 用于定義網頁的樣式&#xff0c;包括針對不同設備和屏幕尺寸的設計和布局。 CSS 實例 body {background-col…

微服務2--服務治理與服務調用

前言 &#xff1a;本文主要闡述微服務架構中的服務治理&#xff0c;以及Nacos環境搭建、服務注冊、服務調用&#xff0c;負載均衡以及Feign實現服務調用。 服務治理 服務治理是微服務架構中最核心最基本的模塊。用于實現各個微服務的自動化注冊與發現。 服務注冊&#xff1a;在…

智能麻將出牌組件

開篇引言? 麻將作為一款風靡全球的策略性游戲&#xff0c;其復雜的規則和多變的牌局給玩家帶來了無盡樂趣。在數字化時代&#xff0c;運用編程技術為麻將游戲賦予智能&#xff0c;實現自動出牌功能&#xff0c;不僅能提升玩家體驗&#xff0c;還能深入探索算法在博弈游戲中的…

“大灣區珠寶藝境花園”璀璨綻放第五屆消博會

2025年4月13日&#xff0c;第五屆中國國際消費品博覽會&#xff08;以下簡稱"消博會"&#xff09;重要主題活動——《大灣區珠寶藝境花園》啟動儀式在海南國際會展中心2號館隆重舉行。由廣東省金銀珠寶玉器業廠商會組織帶領粵港澳大灣區優秀珠寶品牌&#xff0c;以“…

基于前端技術的QR碼API開發實戰:從原理到部署

前言 QR碼&#xff08;Quick Response Code&#xff09;是一種二維碼&#xff0c;于1994年開發。它能快速存儲和識別數據&#xff0c;包含黑白方塊圖案&#xff0c;常用于掃描獲取信息。QR碼具有高容錯性和快速讀取的優點&#xff0c;廣泛應用于廣告、支付、物流等領域。通過掃…

利用耦合有限元和神經網絡計算的骨重塑模擬多尺度方法

Multiscale methodology for bone remodelling simulation using coupled finite element and neural network computation 摘要&#xff1a;本文旨在開發一種基于有限元分析&#xff08;FEA&#xff09;和神經網絡&#xff08;NN&#xff09;計算的多尺度分層混合模型&#xf…

使用異步特征引發的錯誤error[E0195]: lifetime parameters or bounds on method `before_save`

問題描述&#xff1a; 使用SeaOrm保存實體到數據庫時不想每次都設置更新時間&#xff0c;所以想通過實現ActiveModelBehavior在保存實體前統一設置更新時間 impl ActiveModelBehavior for ActiveModel {async fn before_save<C>(self, _db: &C, _insert: bool) -&…

TVS管與ESD保護二極管詳解:原理、區別與應用選型

一、TVS管&#xff08;瞬態電壓抑制二極管&#xff09; 1. 基本定義 TVS管&#xff08;Transient Voltage Suppressor&#xff09; 是一種用于抑制瞬態高壓脈沖的半導體器件&#xff0c;通過雪崩擊穿效應快速鉗位電壓&#xff0c;保護后端電路。 2. 核心特性參數 參數定義公…

Day08 【基于jieba分詞實現詞嵌入的文本多分類】

基于jieba分詞的文本多分類 目標數據準備參數配置數據處理模型構建主程序測試與評估測試結果 目標 本文基于給定的詞表&#xff0c;將輸入的文本基于jieba分詞分割為若干個詞&#xff0c;然后將詞基于詞表進行初步編碼&#xff0c;之后經過網絡層&#xff0c;輸出在已知類別標…

入門-C編程基礎部分:6、常量

飛書文檔https://x509p6c8to.feishu.cn/wiki/MnkLwEozRidtw6kyeW9cwClbnAg C 常量 常量是固定值&#xff0c;在程序執行期間不會改變&#xff0c;可以讓我們編程更加規范。 常量可以是任何的基本數據類型&#xff0c;比如整數常量、浮點常量、字符常量&#xff0c;或字符串字…