在 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 物件類型
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() 的區別:
功能將 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 數據! 🚀