Logo

新人日誌

首頁關於我部落格

新人日誌

Logo

網站會不定期發佈技術筆記、職場心得相關的內容,歡迎關注本站!

網站
首頁關於我部落格
部落格
分類系列文

© 新人日誌. All rights reserved. 2020-present.

Python json.dumps() 函數完整指南

最後更新:2025年2月9日Python

在 Python 開發中,JSON(JavaScript Object Notation)是一種廣泛使用的數據交換格式,適用於前後端數據傳輸、配置文件存儲等場景。

Python 提供了內建的 json 模組來處理 JSON 格式的數據,其中 json.dumps() 是一個常用的函數,專門用於將 Python 對象轉換為 JSON 字符串。

本篇文章將詳細介紹 json.dumps() 的使用方法,包括其參數選項、格式化 JSON、處理中文字符、自定義序列化等技巧,讓你可以更靈活地操作 JSON 數據。


json.dumps() 函數的基本介紹

json.dumps() 的語法

import json
json_string = 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)

參數說明:

  • obj:必填,要轉換為 JSON 字符串的 Python 對象(如 dict、list、tuple 等)。
  • skipkeys:如果字典的鍵不是字符串,設置為 True 可忽略該鍵,否則會報錯(默認 False)。
  • ensure_ascii:是否使用 ASCII 編碼(默認 True),設置 False 可顯示原始 Unicode 字符。
  • check_circular:檢查循環引用,避免無窮遞歸(默認 True)。
  • allow_nan:是否允許 NaN、Infinity、-Infinity(默認 True,不允許則報錯)。
  • cls:自定義 JSON 編碼器類(默認 None)。
  • indent:設定 JSON 字符串的縮進層級,方便閱讀(默認 None,無縮進)。
  • separators:控制 JSON 分隔符(如 (',', ': '))。
  • default:自定義對象序列化函數,當對象無法直接轉換時使用。
  • sort_keys:是否按鍵名排序(默認 False)。

json.dumps() 基本使用

將 Python 物件轉換為 JSON 字符串

import json

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

json_string = json.dumps(data)
print(json_string)

輸出:

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

這段代碼將 Python 字典轉換為 JSON 格式的字符串。

支持的 Python 物件類型

Python 類型JSON 類型
dictobject
list, tuplearray
strstring
int, floatnumber
booltrue/false
Nonenull
JSON 類型object
JSON 類型array
JSON 類型string
JSON 類型number
JSON 類型true/false
JSON 類型null

例如:

data = {
    "list": [1, 2, 3],
    "tuple": (4, 5, 6),
    "bool": True,
    "none": None
}

json_string = json.dumps(data)
print(json_string)

輸出:

{"list": [1, 2, 3], "tuple": [4, 5, 6], "bool": true, "none": null}

json.dumps() 進階用法

ensure_ascii=False 顯示非 ASCII 字符

默認情況下,json.dumps() 會將非 ASCII 字符(如中文)轉換為 Unicode 編碼:

data = {"message": "你好,世界"}

json_string = json.dumps(data)
print(json_string)

輸出:

{"message": "\u4f60\u597d\uff0c\u4e16\u754c"}

如果希望保留原始字符,可以設置 ensure_ascii=False:

json_string = json.dumps(data, ensure_ascii=False)
print(json_string)

輸出:

{"message": "你好,世界"}

indent 參數格式化 JSON

為了讓 JSON 更易讀,可以使用 indent 參數添加縮進:

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

json_string = json.dumps(data, indent=4)
print(json_string)

輸出:

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

sort_keys=True 按鍵名排序

data = {"b": 2, "c": 3, "a": 1}

json_string = json.dumps(data, sort_keys=True)
print(json_string)

輸出:

{"a": 1, "b": 2, "c": 3}

default 參數處理無法序列化的對象

如果 json.dumps() 遇到無法轉換的對象(如 datetime),會拋出 TypeError:

import json
from datetime import datetime

data = {"timestamp": datetime.now()}

# 這行會報錯
json.dumps(data)

解決方案:使用 default 參數指定轉換函數:

def custom_serializer(obj):
    if isinstance(obj, datetime):
        return obj.strftime("%Y-%m-%d %H:%M:%S")
    raise TypeError("Type not serializable")

json_string = json.dumps(data, default=custom_serializer)
print(json_string)

輸出:

{"timestamp": "2025-02-09 14:30:00"}

separators 控制 JSON 格式

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

json_string = json.dumps(data, separators=(",", ":"))
print(json_string)

輸出(無多餘空格):

{"name":"Alice","age":25,"city":"NewYork"}

json.dumps() vs json.dump()

json.dumps() 與 json.dump() 的區別:

函數功能輸出
json.dumps()將 Python 對象轉換為 JSON 字符串返回 str
json.dump()將 Python 對象寫入 JSON 文件無返回值,直接寫入文件
功能將 Python 對象轉換為 JSON 字符串
輸出返回 str
功能將 Python 對象寫入 JSON 文件
輸出無返回值,直接寫入文件

示例:

data = {"name": "Alice", "age": 25}

# 使用 json.dump() 寫入文件
with open("data.json", "w") as f:
    json.dump(data, f, indent=4)

# 使用 json.dumps() 轉換為字符串
json_string = json.dumps(data)
print(json_string)

小結

  • json.dumps() 用於將 Python 對象轉換為 JSON 字符串。
  • 可用 ensure_ascii=False 顯示非 ASCII 字符(如中文)。
  • indent 參數可讓 JSON 格式更易讀。
  • default 參數可處理自定義對象(如 datetime)。
  • json.dump() 用於將 JSON 數據寫入文件,而 json.dumps() 則返回字符串。

透過這篇指南,希望你能更熟練地使用 json.dumps() 處理 JSON 數據! 🚀

目前還沒有留言,成為第一個留言的人吧!

發表留言

留言將在審核後顯示。

Python

目錄

  • json.dumps() 函數的基本介紹
  • json.dumps() 的語法
  • json.dumps() 基本使用
  • 將 Python 物件轉換為 JSON 字符串
  • 支持的 Python 物件類型
  • json.dumps() 進階用法
  • ensure_ascii=False 顯示非 ASCII 字符
  • indent 參數格式化 JSON
  • sort_keys=True 按鍵名排序
  • default 參數處理無法序列化的對象
  • separators 控制 JSON 格式
  • json.dumps() vs json.dump()
  • 小結