پرسش

چطور می‌تونم مشکل JSON قابل سریالیزه نبودن datetime.datetime رو حل کنم؟

How can I overcome datetime.datetime not JSON serializable?

میخوام یک شی datetime.datetime رو توی JSON ذخیره کنم، اما وقتی این کار رو انجام میدم، با خطای "datetime.datetime not JSON serializable" مواجه میشم. چطور می‌تونم این شیء رو بدون خطا در JSON ذخیره کنم؟

1403/06/03
پاسخ
رضا دولتی عاشق برنامه نویسی و هوش مصنوعی!
بیوگرافی رضا دولتی

برای اینکه بتونی یک شیء datetime.datetime رو به JSON تبدیل کنی، باید اونو به یک رشته (string) تبدیل کنی، چون JSON به طور پیش‌فرض با datetime کاری نداره و اونو نمی‌شناسه. یک راه‌حل ساده برای این کار اینه که از متد default در json.dumps استفاده کنی و datetime رو به یه فرمت رشته‌ای قابل خواندن تبدیل کنی. مثال زیر این موضوع رو به خوبی توضیح میده:

import json
from datetime import datetime
# Custom function to handle datetime serialization
def datetime_serializer(obj):
    if isinstance(obj, datetime):
        return obj.isoformat()  # Converts datetime to ISO 8601 string
    raise TypeError("Type not serializable")
# Example dictionary with a datetime object
data = {
    "name": "John",
    "timestamp": datetime.now()
}
# Serialize the dictionary to JSON using the custom serializer
json_data = json.dumps(data, default=datetime_serializer)
print(json_data)

توی این کد، تابع datetime_serializer به صورت دستی چک می‌کنه که آیا آبجکتی که می‌خوای سریالیزه کنی از نوع datetime هست یا نه. اگر بود، اونو به فرمت ISO 8601 تبدیل می‌کنه (که به صورت پیش‌فرض توی JSON هم ساپورت می‌شه).

اگه هم لازم داشتی که موقع دی‌سریالیزه کردن JSON دوباره datetime رو برگردونی، می‌تونی از یه روش مشابه استفاده کنی که بعداً اون رشته رو دوباره به datetime تبدیل کنه.

با استفاده از این روش، دیگه مشکلی با سریالیزه کردن datetime نخواهی داشت و به راحتی می‌تونی این نوع داده‌ها رو توی JSON ذخیره کنی و بخونی.

پاسخ: 1403/06/03
آخرین آپدیت: 1403/07/30