|
|
|
|
|
在本文中,我們將看到如何將日期時(shí)間 DateTime 實(shí)例序列化為 JSON。有多種方法可以實(shí)現(xiàn)這一點(diǎn),你可以選擇你認(rèn)為對(duì)你的問(wèn)題更有用的方式。
解釋了如何將 Python Datetime 序列化為 JSON
子類 JSONEncoder 將 DateTime 序列化為 JSON
Python json 模塊提供了一個(gè)json.JSONEncoder
類。如果我們想要更多定制的輸出,我們可以擴(kuò)展它。即,要將 DateTime 實(shí)例序列化為 JSON,我們需要繼承 JSONEncoder 以便我們可以實(shí)現(xiàn)自定義序列化。
當(dāng)我們說(shuō)子類json.JSONEncoder
時(shí),意味著我們需要覆蓋JSONEncoder 類的default()
方法,我們可以在其中將 DateTime 值轉(zhuǎn)換為 ISO 格式,以便它可以序列化。ISO 格式產(chǎn)生一個(gè)序列化版本的datetime。
根據(jù) ISO 8601,它以YYYY-MM-DDTHH:MM:SS易于編碼和解碼的格式轉(zhuǎn)換 DateTime 。我們可以使用一種isoformat()
方法將 DateTime 值轉(zhuǎn)換為 ISO 格式。
JSON 模塊的json.dump()
和 json.dumps()
方法有一個(gè)cls
kwarg。使用這個(gè)參數(shù),你可以傳遞一個(gè)自定義的 JSON 編碼器,它告訴json.dump()
或json.dumps()
方法如何將你的 DateTime 編碼為 JSON 格式的數(shù)據(jù)。
我有一個(gè)員工dict
,其中包含員工詳細(xì)信息和他/她的加入日期。讓我們看看如何將員工詳細(xì)信息編碼為 JSON。
現(xiàn)在,讓我們看看這個(gè)例子。
import json
import datetime
from json import JSONEncoder
employee = {
"id": 456,
"name": "William Smith",
"salary": 8000,
"joindate": datetime.datetime.now()
}
# subclass JSONEncoder
class DateTimeEncoder(JSONEncoder):
#Override the default method
def default(self, obj):
if isinstance(obj, (datetime.date, datetime.datetime)):
return obj.isoformat()
print("Printing to check how it will look like")
print(DateTimeEncoder().encode(employee))
print("Encode DateTime Object into JSON using custom JSONEncoder")
employeeJSONData = json.dumps(employee, indent=4, cls=DateTimeEncoder)
print(employeeJSONData)
輸出
Printing to check how it will look like
{"id": 456, "name": "William Smith", "salary": 8000, "joindate": "2020-01-08T18:52:50.637635"}
Encode DateTime Object into JSON using custom JSONEncoder
{
"id": 456,
"name": "William Smith",
"salary": 8000,
"joindate": "2020-01-08T18:52:50.637635"
}
通過(guò)將日期時(shí)間轉(zhuǎn)換為字符串來(lái)序列化日期時(shí)間
你可以將dateTime value 轉(zhuǎn)換為其 String 表示并直接對(duì)其進(jìn)行編碼,這里你不需要編寫任何編碼器。我們需要像這樣json.dump()
或json.dumps()
設(shè)置str的默認(rèn)參數(shù)json.dumps(obj, default=str)
。
讓我們看看這個(gè)例子。
import json
import datetime
employee = {
"id": 456,
"name": "William Smith",
"salary": 8000,
"joindate": datetime.datetime.now()
}
print("JSON Data")
print(json.dumps(employee, default=str))
輸出:
JSON Data
{"id": 456, "name": "William Smith", "salary": 8000, "joindate": "2020-01-08 18:39:30.161488"}
總結(jié)
本文通過(guò)兩種方法介紹了Python將日期時(shí)間DateTime序列化為JSON,你可以選擇你認(rèn)為對(duì)你的問(wèn)題更有用的方式。