【Pyhton】Json.dump 語法說明

目錄

  • `json.dump()` 的語法
  • 參數說明
    • 1. `obj`
    • 2. `fp`
    • 3. `skipkeys`
    • 4. `ensure_ascii`
    • 5. `check_circular`
    • 6. `allow_nan`
    • 7. `cls`
    • 8. `indent`
    • 9. `separators`
    • 10. `default`
    • 11. `sort_keys`
    • **示例代碼**
      • **基本用法**
      • 使用 `indent` 和 `separators`
    • 使用 `default` 參數
  • 總結

json.dump() 是 Python 中 json 模塊用于將 Python 數據結構序列化為 JSON 格式并寫入文件的方法。它提供了多個參數,用于控制序列化的行為和輸出格式。以下是 json.dump() 的參數及其說明:

json.dump() 的語法

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)

參數說明

1. obj

  • 類型:任何可序列化的 Python 數據結構(如字典、列表、字符串、數字等)。
  • 說明:這是需要被序列化為 JSON 格式的 Python 對象。

2. fp

  • 類型:文件對象。
  • 說明:必須是一個支持 .write() 方法的文件對象,通常是通過 open() 函數以文本模式('w''a')打開的文件。

3. skipkeys

  • 類型:布爾值,默認為 False
  • 說明
    • 如果設置為 True,則在序列化字典時,會跳過那些鍵不是基本類型(如字符串、數字、元組等)的鍵值對。
    • 如果設置為 False,則會拋出 TypeError 異常,提示鍵不可序列化。

4. ensure_ascii

  • 類型:布爾值,默認為 True
  • 說明
    • 如果設置為 True,則輸出的 JSON 字符串中所有非 ASCII 字符都會被轉義為 Unicode 轉義序列(如 \uXXXX)。
    • 如果設置為 False,則會直接輸出非 ASCII 字符(如中文、日文等),這在處理國際化數據時非常有用。

5. check_circular

  • 類型:布爾值,默認為 True
  • 說明
    • 如果設置為 True,則在序列化過程中會檢查對象是否包含循環引用(即對象引用自身)。如果發現循環引用,會拋出 ValueError 異常。
    • 如果設置為 False,則不會進行循環引用檢查,但可能會導致程序崩潰或無限遞歸。

6. allow_nan

  • 類型:布爾值,默認為 True
  • 說明
    • 如果設置為 True,則允許序列化 float('nan')float('inf')float('-inf') 等特殊浮點值。
    • 如果設置為 False,則會拋出 ValueError 異常,提示這些值不可序列化。

7. cls

  • 類型:類,默認為 None
  • 說明
    • 指定一個自定義的 JSON 編碼器類。如果需要自定義序列化邏輯,可以繼承 json.JSONEncoder 并重寫其方法。
    • 如果未指定,則使用默認的 json.JSONEncoder

8. indent

  • 類型:整數或字符串,默認為 None
  • 說明
    • 用于控制輸出的 JSON 字符串的縮進格式。
    • 如果設置為整數,則表示縮進的空格數(例如 indent=4 表示每級縮進 4 個空格)。
    • 如果設置為字符串,則表示縮進的字符(例如 indent="\t" 表示每級縮進一個制表符)。
    • 如果設置為 None,則輸出的 JSON 字符串不會進行格式化,而是緊湊的單行輸出。

9. separators

  • 類型:元組,默認為 None
  • 說明
    • 指定 JSON 數據中鍵值對和數組元素之間的分隔符。
    • 默認值為 (', ', ': '),即鍵值對之間用逗號和空格分隔,鍵和值之間用冒號和空格分隔。
    • 如果需要緊湊的輸出,可以設置為 (',', ':'),去掉多余的空格。

10. default

  • 類型:函數,默認為 None
  • 說明
    • 指定一個函數,用于處理無法直接序列化的對象。
    • json.dump() 遇到無法序列化的對象時,會調用這個函數,并將對象作為參數傳入。該函數需要返回一個可序列化的值。

11. sort_keys

  • 類型:布爾值,默認為 False
  • 說明
    • 如果設置為 True,則在序列化字典時,會按照鍵的字典序對鍵值對進行排序。
    • 如果設置為 False,則不會對鍵值對進行排序,保持原始順序。

示例代碼

基本用法

import jsondata = {"name": "Alice","age": 25,"city": "New York","hobbies": ["reading", "traveling", "coding"]
}# 將數據寫入 JSON 文件
with open("data.json", "w", encoding="utf-8") as file:json.dump(data, file, ensure_ascii=False, indent=4)

生成的 data.json 文件內容:

{"name": "Alice","age": 25,"city": "New York","hobbies": ["reading","traveling","coding"]
}

使用 indentseparators

import jsondata = {"name": "Alice","age": 25,"city": "New York"
}# 緊湊格式輸出
with open("data.json", "w", encoding="utf-8") as file:json.dump(data, file, separators=(',', ':'))# 格式化輸出
with open("data_pretty.json", "w", encoding="utf-8") as file:json.dump(data, file, indent=4)

生成的 data.json 文件內容(緊湊格式):

{"name":"Alice","age":25,"city":"New York"}

生成的 data_pretty.json 文件內容(格式化輸出):

{"name": "Alice","age": 25,"city": "New York"
}

使用 default 參數

假設有一個包含日期對象的字典:

import json
from datetime import datetimedata = {"name": "Alice","birthday": datetime(1995, 5, 15)
}# 自定義序列化函數
def serialize_datetime(obj):if isinstance(obj, datetime):return obj.isoformat()raise TypeError(f"Type {type(obj)} is not serializable")# 將數據寫入 JSON 文件
with open("data.json", "w", encoding="utf-8") as file:json.dump(data, file, default=serialize_datetime, indent=4)

生成的 data.json 文件內容:

{"name": "Alice","birthday": "1995-05-15T00:00:00"
}

總結

  • json.dump() 是一個功能強大的方法,用于將 Python 數據結構序列化為 JSON 格式并寫入文件。
  • 它提供了豐富的參數,用于控制序列化的行為和輸出格式,例如 ensure_asciiindentseparatorsdefault 等。
  • 通過合理使用這些參數,可以滿足各種復雜的序列化需求。

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

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

相關文章

LangGraph-2-interrupt 流程中斷

interrupt 是 LangGraph 中一個強大的流程控制機制,允許在狀態機執行過程中根據特定條件中斷當前流程并跳轉到其他節點。這種機制特別適用于處理異常情況、用戶中斷或特定業務規則的觸發。在 LangGraph 中,interrupt_before 和 interrupt_after 是兩個強…

前綴和|差分

題目:MT2047距離平方和你有𝑛n個點,請編寫一個程序,求這𝑛n個點的距離的平方和。格式輸入格式:第一行:一個整數𝑛(0≤𝑛≤100000)n(0≤…

x86架構CPU市場格局

x86架構的CPU市場是全球處理器市場的核心,涵蓋PC(桌面端與移動端)、服務器和超算等領域,主要玩家為英特爾(Intel)和AMD。以下基于最新數據分析市場格局及各領域份額,輔以國產廠商動態。 1. 總體…

【Swift開發】屏蔽NSSecureCoding頻繁警告

解決 iOS 開發中 NSSecureCoding 警告的最佳實踐 問題背景 在開發 Mac 應用時,我遇到了一個令人困擾的問題:Xcode 控制臺不斷輸出 NSSecureCoding allowed classes list contains [NSObject class] 相關的警告信息。這些警告雖然不影響應用功能&#xff…

SpringBoot實現MCP

前言 之前的文章都是各種使用MCP,自從有了MCP我們立馬感受到大模型真的可以幫我們干活了,實際上當我們想把企業內部的業務向AI方向轉型的話主要就是實現MCP,另外加上多Agent在流程上的控制和自有的知識庫這就可以滿足企業80%的需求了,剩下的2…

windows對\和/敏感嗎?

在Windows系統中,路徑分隔符\和/的敏感性需要分情況來看: 1. 文件系統層面 Windows文件系統(如NTFS、FAT32)不區分\和/。 例如,以下路徑是等效的: C:\Users\Documents\file.txt C:/Users/Documents/file.tx…

緩存穿透與擊穿多方案對比與實踐指南

緩存穿透與擊穿多方案對比與實踐指南 問題背景介紹 在高并發的分布式系統中,緩存是提升讀寫性能的重要組件。但在實際生產環境中,經常會遇到兩類問題: 緩存穿透:客戶端頻繁請求不存在的數據,導致請求直達數據庫&#x…

【音視頻】HTTP協議介紹

參考博客:https://cloud.tencent.com/developer/article/2183902 一、HTTP協議概述 HTTP(HyperText Transfer Protocol) 即 超文本傳輸協議,它是一種用于分布式、協作式和超媒體信息系統的應用層協議。HTTP 是萬維網&#xff08…

神經網絡基礎及API使用詳解

一、神經網絡概述神經網絡是一種模仿生物神經網絡結構和功能的計算模型,它由大量的人工神經元相互連接構成,能夠通過調整內部大量節點之間相互連接的關系,從而達到處理信息的目的。1.1 神經網絡的基本組成輸入層:接收原始數據隱藏…

分桶表的介紹和作用

一、分桶表的基本介紹1、什么是分桶表?分桶表主要是用于分文件的,在建表的時候,指定按照那些字段執行分桶操作,并可以設置需要分多少個桶,當插入數據的時候,執行MR的分區的操作,將數據分散各個分…

HighReport報表工具開始支持BS報表設計器

HighReport報表工具同時支持c/s報表設計器和b/s報表設計器,大部分情況下使用c/s報表設計器,在某些業務場景或者用戶自己簡單修改報表模板,可以用b/s報表設計器。b/s報表設計器和c/s報表設計器操作一樣b/s報表設計器免費下載免費使用(c/s報表設…

數據結構--堆的實現

目錄 一、堆的概念及結構 二、小根堆的實現 2.1 堆的數據結構 2.2 堆的初始化HeapInit 2.3 堆的銷毀HeapDestory 2.4 堆的插入HeapPush ?2.4.1 插入代碼HeapPush 2.4.2 向上調整代碼AdjustUp 2.4.3 交換數據代碼Swap 2.5 堆的刪除HeapPop 2.5.1 刪除代碼HeapPop 2…

evo軌跡評估工具

文章目錄evo參數設置evo_traj指標度量evo_apeevo_rpe結果比較evo工具主要有如下六個常用命令: evo_ape - 用于評估絕對位姿誤差;evo_rpe- 用于評估相對位姿誤差;evo_traj - 這個主要是用來畫軌跡、輸出軌跡文件、轉換數據格式等功能&#xf…

Django+DRF 實戰:自定義異常處理流程

文章目錄一、DRF 異常處理流程DRF 默認異常處理流程源碼二、實戰DRF 自定義異常處理流程應用自定義異常處理流程一、DRF 異常處理流程 DRF 默認異常處理流程 DRF默認的異常處理流程如下: 當異常發生時,會自動調用rest_framework.views.exception_hand…

Spring MVC 1

什么是Spring Web MVC 官方對Spring MVC的描述是這樣的:Spring Web MVC 是基于Severlet API構建的原始Web框架,從一開始就包含在Spring框架中。它的正式名稱“Spring Web MVC”來自其源模塊的名稱(Spring-webmvc),但它…

一個基于若依(ruoyi-vue3)的小項目部署記錄

一、背景 收到朋友的求助,他拿到了一個項目的源代碼,說需要我幫助部署。部署要求是需要域名訪問。 因為沒有文檔和其他資料以及幫助,我先清理了源收到的資料: 1.后端:是java代碼,一看就是若依框架。心里大大…

【實戰總結】WMIC在HW行動中的4類關鍵應用

WMIC命令完全指南:網絡安全運維工程師的深度實踐手冊 關鍵詞:WMIC命令、Windows管理、網絡安全運維、系統信息收集、進程分析、自動化審計 【實戰總結】WMIC在HW行動中的4類關鍵應用 1. 前言 在Windows環境下的網絡安全運維中,WMIC&#x…

LKT4304穩定可靠高兼容性國產安全加密芯片

隨著 IOT 的飛速發展,智能家居,智能汽車,智能工控等物聯網設備和云服務的安全問題成為IOT普及的關鍵障礙。在設計之初就為物聯網產品配備正確的安全解決方案,是幫助預防措施的關鍵所在。LKT4304是凌科芯安專為物聯網應用場景而推出…

Android 網絡開發核心知識點

Android 網絡開發核心知識點 一、基礎網絡通信 1. HTTP/HTTPS 協議 HTTP方法:GET、POST、PUT、DELETE等狀態碼:200(成功)、404(未找到)、500(服務器錯誤)等HTTPS加密:SSL/TLS握手過程報文結構:請求頭/響應頭、請求體/響應體 2. 網…

DVWA靶場通關筆記-弱會話IDs(Weak Session IDs Medium級別)

目錄 一、Session ID 二、代碼審計(Medium級別) 1、配置security為Medium級別 2、源碼分析 (1)index.php (2)Medium.php (3)對比分析 (4)滲透思路 三…