Python基礎教程: json序列化詳細用法介紹

前言

嗨嘍,大家好呀~這里是愛看美女的茜茜吶

Python內置的json模塊提供了非常完善的對象到JSON格式的轉換。

廢話不多說,我們先看看如何把Python對象變成一個JSON:

d = dict(name='Kaven', age=17, sex='Male')
print(json.dumps(d))  # {"name": "Kaven", "age": 17, "sex": "Male"}

說明:

dumps()方法返回一個str,內容就是標準的JSON。

類似的,dump()方法可以直接把JSON寫入一個 Object。

要把JSON反序列化為Python對象,我們可以用loads()或者對應的load()方法,前者把JSON的字符串反序列化,后者從Object中讀取字符串并反序列化:

比如這樣:

import json
json_str = '{"name": "Kaven", "age": 17, "sex": "Male"}'
print(json.loads(json_str)) # {'name': 'Kaven', 'age': 17, 'sex': 'Male'}

👇 👇 👇 更多精彩機密、教程,盡在下方,趕緊點擊了解吧~

資料、視頻教程、代碼、插件安裝教程等我都準備好了,直接在文末名片自取就可


Python的dict對象可以直接序列化為JSON的{},那么如何用class對象,比如定義Person類,然后序列化?

dumps 可選參數default就是把任意一個對象變成一個可序列為JSON的對象,我們只需要為Person專門寫一個轉換函數,再把函數傳進去即可:

'''
學習中遇到問題沒人解答?小編創建了一個Python學習交流QQ群:926207505
尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學習教程和PDF電子書!
'''
import jsonclass Person(object):# __slots__ = ('name', 'age') # 通常class的實例都有一個__dict__屬性,它就是一個dict,# 用來存儲實例變量。也有少數例外,比如定義了__slots__的class,大家可以開啟后運行看看報錯信息def __init__(self, name, age, sex):self.name = nameself.age = ageself.sex = sexdef PersonToDict(cls):return {'name': cls.name,'age': cls.age,'sex': cls.sex}s = Person('Kaven', 17, 'Male')
print(json.dumps(s, default=PersonToDict))
# print(json.dumps(s, default=lambda obj: obj.__dict__)) 輸出和上面一樣
# 輸出 : {"name": "Kaven", "age": 17, "sex": "Male"}

這樣,Person實例首先被PersonToDict()函數轉換成dict,然后再被序列化為JSON,大家看到下面有個lambda匿名函數,他的用處可大了,比如:

下次如果遇到一個Apple/Banaba等類的實例,可以把任意class的實例變為dict:

print(json.dumps(s, default=lambda obj: obj.__dict__)) # obj為對象參數名,可自定義

同樣的道理,如果我們要把JSON反序列化為一個Person對象實例,loads()方法首先轉換出一個dict對象,然后,我們再傳入的object_hook函數負責把dict轉換為Person實例:

'''
學習中遇到問題沒人解答?小編創建了一個Python學習交流QQ群:926207505
尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學習教程和PDF電子書!
'''
import jsonclass Person(object):# __slots__ = ('name', 'age') # 通常class的實例都有一個__dict__屬性,它就是一個dict,# 用來存儲實例變量。也有少數例外,比如定義了__slots__的class,大家可以開啟后運行看看報錯信息def __init__(self, name, age, sex):self.name = nameself.age = ageself.sex = sexdef DictToPerson(d):return Person(d['name'], d['age'], d['sex'])json_str = '{"name": "Kaven", "age": 20, "sex": "Male"}'
cls = json.loads(json_str, object_hook=DictToPerson)
print(cls.name) # Kaven

Python還有個pickle模塊,可能存在Python兼容問題,只能用Pickle保存那些不重要的數據。

尾語

感謝你觀看我的文章吶~本次航班到這里就結束啦 🛬

希望本篇文章有對你帶來幫助 🎉,有學習到一點知識~

躲起來的星星🍥也在努力發光,你也要努力加油(讓我們一起努力叭)。

最后,宣傳一下呀~👇👇👇更多源碼、資料、素材、解答、交流皆點擊下方名片獲取呀👇👇

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

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

相關文章

【Linux】環境變量

目錄 一、環境變量的概念二、 常見的環境變量1.查看環境變量的方法2.PATH3.HOME4.SHELL 三、環境變量的相關指令四、命令行參數 一、環境變量的概念 環境變量(environment variables)一般是指在操作系統中用來指定操作系統運行環境的一些參數 如:我們在編寫C/C代碼的…

Prometheus技術文檔-基本使用-配置文件全解!!!!!

簡介: Prometheus是一個開源的系統監控和告警系統,由Google的BorgMon監控系統發展而來。它主要用于監控和度量各種時間序列數據,比如系統性能、網絡延遲、應用程序錯誤等。Prometheus通過采集監控數據并存儲在時間序列數據庫中,…

【視頻】使用OBS將MP4推流至騰訊云直播

1、下載OBS OBS官網:https://obsproject.com/ OBS支持Win、Mac、Linux,如果下載速度很慢,建議使用迅雷下載 2、OBS推流設置 2.1 添加場景 默認會有一個“場景”,如果想繼續添加可以點擊“+”按鈕 2.2 添加媒體源 1)點擊“來源”窗口中“+”按鈕 2)支持的媒體源如…

什么是Redis緩存雪崩、緩存穿透、緩存擊穿

緩存穿透(Cache Penetration) 什么是緩存穿透? 緩存穿透是指惡意或無效的請求導致緩存無法命中,從而每個請求都需要訪問數據庫。這可能發生在請求的數據根本不存在于緩存和數據庫中。 緩存穿透解決方案 使用布隆過濾器&#x…

安裝Tomac服務器——安裝步驟以及易出現問題的解決方法

文章目錄 前言 一、下載Tomcat及解壓 1、選擇下載版本(本文選擇tomcat 8版本為例) 2、解壓安裝包 二、配置環境 1、在電腦搜索欄里面搜索環境變量即可 2、點擊高級系統設置->環境變量->新建系統變量 1) 新建系統變量,變量名為…

【學會動態規劃】最大子數組和(19)

目錄 動態規劃怎么學? 1. 題目解析 2. 算法原理 1. 狀態表示 2. 狀態轉移方程 3. 初始化 4. 填表順序 5. 返回值 3. 代碼編寫 寫在最后: 動態規劃怎么學? 學習一個算法沒有捷徑,更何況是學習動態規劃, 跟我…

LeetCode 0088. 合并兩個有序數組

【LetMeFly】88.合并兩個有序數組:O(m 1) O(1)的做法 力扣題目鏈接:https://leetcode.cn/problems/merge-sorted-array/ 給你兩個按 非遞減順序 排列的整數數組 nums1 和 nums2,另有兩個整數 m 和 n ,分別表示 nums1 和 nums2…

Linux:Shell編輯之文本處理器(sed)

目錄 緒論 1、sed的原理:讀取 執行 顯示 三個過程 2、sed 文本內容處理工具,文件過大怎么辦? 3、sed的操作選項 3.1 常用選項 3.2 操作符 3.3 行號的范圍打印 3.4 對包含指定字符串的內容進行打印 3.5 刪 3.5.1 正則表達式刪除 3.6…

一個工作簿中的多個工作表拆分成多個工作簿

在Excel 2016中將一個工作簿中的多個工作表拆分成多個工作簿,在開發工具中的vba 模塊中輸入一下代碼(并修改savepath的值為要存儲的路徑),然后運行即可。 Sub SplitWorkbook()Dim srcWorkbook As WorkbookDim srcWorksheet As Wo…

深入淺出 棧和隊列(附加循環隊列、雙端隊列)

棧和隊列 一、棧 概念與特性二、Stack 集合類及模擬實現1、Java集合中的 Stack2、Stack 模擬實現 三、棧、虛擬機棧、棧幀有什么區別?四、隊列 概念與特性五、Queue集合類及模擬實現1、Queue的底層結構(1)順序結構(2)鏈…

Golang-使用 gvm 進行版本控制

當你想為每個項目切換 go 版本時,gvm (Go Version Manager) 很方便。 這里,我將介紹“如何在Mac上安裝gvm”和“如何使用gvm” 使用準備 僅適用于 Mac 的準備工作 按照MacOSX 要求中的說明執行以下命令。 xcode-select --install brew update brew …

C++(Qt)軟件調試---將調試工具安裝到AeDebug(11)

C(Qt)軟件調試—將調試工具安裝到AeDebug(11) 文章目錄 C(Qt)軟件調試---將調試工具安裝到AeDebug(11)1、前言1.1 使用的調試工具 2、調試器安裝1.1 WinDbg1.2 procdump1.3 DrMinGW1.4 vsjitdebugger 更多精彩內容👉個…

深入了解Linux運維的重要性與最佳實踐

Linux作為開源操作系統的代表,在企業級環境中的應用越來越廣泛。而在保障Linux系統的正常運行和管理方面,Linux運維顯得尤為關鍵。本文將介紹Linux運維的重要性以及一些最佳實踐,幫助讀者更好地了解和掌握Linux系統的運維技巧。 首先&#xf…

OPENCV C++(十)gramm矯正+直方圖均衡化

兩者都是只對單通道使用,對多通道的話 就需要分離通道處理再合并通道 兩種方法,第一個要運算次數太多了,第二個只需要查表 伽馬矯正函數,這里用第二種方法,且寫法有點高級 int gammaCorrection(cv::Mat srcMat, cv::…

Java【Spring】使用注解, 更簡單的存儲和獲取 Bean

文章目錄 前言一、存儲 Bean1, 配置文件2, 五大類注解Bean 的命名規則 3, 方法注解Bean 的命名規則 二、獲取 Bean1, 屬性注入2, Setter 注入3, 構造方法注入4, Autowired 和 Resource 的區別5, 同一個類型的多個 Bean 注入問題 總結 前言 各位讀者好, 我是小陳, 這是我的個人主…

【網絡基礎實戰之路】實現RIP協議與OSPF協議間路由交流的實戰詳解

系列文章傳送門: 【網絡基礎實戰之路】設計網絡劃分的實戰詳解 【網絡基礎實戰之路】一文弄懂TCP的三次握手與四次斷開 【網絡基礎實戰之路】基于MGRE多點協議的實戰詳解 【網絡基礎實戰之路】基于OSPF協議建立兩個MGRE網絡的實驗詳解 PS:本要求基于…

FreeRTOS(任務通知)

資料來源于硬件家園:資料匯總 - FreeRTOS實時操作系統課程(多任務管理) 目錄 一、任務通知的概念 1、概念 2、發送通知給任務的方式 3、任務通知使用限制 二、任務通知的運行機制 三、任務通知的API函數 1、任務通知的數據結構 2、常用的API函數 3、函數x…

opencv實戰項目 手勢識別-實現尺寸縮放效果

手勢識別系列文章目錄 手勢識別是一種人機交互技術,通過識別人的手勢動作,從而實現對計算機、智能手機、智能電視等設備的操作和控制。 1. opencv實現手部追蹤(定位手部關鍵點) 2.opencv實戰項目 實現手勢跟蹤并返回位置信息&…

Linux elasticsearch設置為開機自啟動服務

Linux elasticsearch怎么設置為設置為開機自啟動服務 1、進入/etc/init.d目錄 cd /etc/init.d 2、新建文件elasticsearch,注意,沒有擴展名 vi elasticsearch 3、新建文件elasticsearch的內容如下 說明: (1)“su…

基于低代碼和數字孿生技術的電力運維平臺設計

電力能源服務商在為用能企業提供線上服務的時候,不可避免要面對用能企業的各種個性化需求。如果這些需求和想法都要靠平臺廠家研發人員來實現,那在周期、成本、效果上都將是無法滿足服務運營需要的,這也是目前很多線上能源云平臺應用效果不理…