Tại sao serialization json không hoạt động cho các đối tượng datetime. Khi tôi hiểu tuần tự hóa json ý tưởng cơ bản cho bất kỳ đối tượng nào có thể gọi hàm dựng sẵn __str__
và sau đó urlencode đối tượng mà bạn nhận được dưới dạng phản hồi. Nhưng trong trường hợp của datetime tôi nhận được lỗi sauTại sao serialization json của các đối tượng datetime trong python không làm việc ra khỏi hộp cho các đối tượng datetime
TypeError: datetime.datetime(2012, 5, 23, 18, 38, 23, 37566) is not JSON serializable
trong khi có một __str__
tức là một cách để stringifying đối tượng đã có sẵn, nhưng nó có vẻ như là một quyết định có ý thức để không làm điều đó, tại sao điều đó sẽ là trường hợp ?
Bạn hiểu sai cách hoạt động của json. Nó không liên quan gì đến phương thức __str__. JSON không có kiểu ngày tháng, thời gian, do đó không thể mất mã hóa ngày giờ trong JSON một cách mất mát, mà không có một số loại logic đặc biệt nào trên đầu nhận. Do đó thư viện (logic) làm cho bạn tự làm điều đó bằng cách chuyển đổi sang một dấu thời gian Unix hoặc chuỗi ngày ISO hoặc một cái gì đó và làm cho nó rõ ràng rằng chuyển đổi là cần thiết. –
@TylerEaves Đây là bất cứ điều gì nhưng hợp lý. Có thể mất mã hóa datetime thành chuỗi hoặc int và nhiều trường hợp sử dụng để chuyển đổi từ dict sang json thành dict không bao giờ rời khỏi hệ sinh thái python, nhưng mô đun json không thể xử lý trường hợp này mà không cần tùy chỉnh xử lý datetime? Có thật không?! Nhìn vào số lượng lớn các câu hỏi stackoverflow về chủ đề, tôi muốn nói rằng tôi không đơn độc trong sự hoài nghi của tôi. –