Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

289
Views
TypeError: el objeto de tipo 'datetime' no es JSON serializable (con función de serialización)

Recibo este TypeError: Object of type 'datetime' is not JSON serializable , aunque tengo una función de serialización específica descrita en mi modelo.

Este es mi código:

Ruta Flask (representada por React):

menús.py

 @menus_bp.route('/menus', methods=['GET', 'POST']) def menus(): response_object = { 'status': 'fail', 'message': 'Invalid payload.' } try: user = User.query.filter_by(id=1).first() if user.menu == []: return edit_menu() else: template = render_template('menus.html') response_object = { 'status': 'success', 'message': 'success', 'data': [{"restaurant": user.restaurant, "menu": menu, "content": template}] # template passed to React } # db method Create_Menu(user=user) return jsonify(response_object), 200 except (exc.IntegrityError, ValueError): db.session.rollback() return jsonify(response_object), 400

métodos.py

 def Create_Menu(user): menu = Menu(user=user) db.session.add(menu) db.session.commit() return {"status": True, "menu": menu}

y finalmente el modelo Menu, que tiene una función serialize() :

 class Menu(db.Model): __tablename__='menu' """ Model for storing menus. """ id = db.Column(db.Integer, primary_key=True) created = db.Column(db.DateTime, default=func.now(), nullable=False) user_id = db.Column(db.Integer, db.ForeignKey('users.id')) def __init__(self, user): self.user = user def serialize(self): return { 'id' : self.id, 'created': self.created, 'coffees' : [ item.serialize() for item in self.coffees]}

Pero obtengo el siguiente rastreo:

 TypeError: Object of type 'datetime' is not JSON serializable File "/usr/lib/python3.6/site-packages/flask/app.py", line 2309, in __call__ return self.wsgi_app(environ, start_response) File "/usr/lib/python3.6/site-packages/flask/app.py", line 2295, in wsgi_app response = self.handle_exception(e) File "/usr/lib/python3.6/site-packages/flask_restful/__init__.py", line 269, in error_router return original_handler(e) File "/usr/lib/python3.6/site-packages/flask_cors/extension.py", line 161, in wrapped_function return cors_after_request(app.make_response(f(*args, **kwargs))) File "/usr/lib/python3.6/site-packages/flask/app.py", line 1741, in handle_exception reraise(exc_type, exc_value, tb) File "/usr/lib/python3.6/site-packages/flask/_compat.py", line 34, in reraise raise value.with_traceback(tb) File "/usr/lib/python3.6/site-packages/flask/app.py", line 2292, in wsgi_app response = self.full_dispatch_request() File "/usr/lib/python3.6/site-packages/flask/app.py", line 1815, in full_dispatch_request rv = self.handle_user_exception(e) File "/usr/lib/python3.6/site-packages/flask_restful/__init__.py", line 269, in error_router return original_handler(e) File "/usr/lib/python3.6/site-packages/flask_cors/extension.py", line 161, in wrapped_function return cors_after_request(app.make_response(f(*args, **kwargs))) File "/usr/lib/python3.6/site-packages/flask/app.py", line 1718, in handle_user_exception reraise(exc_type, exc_value, tb) File "/usr/lib/python3.6/site-packages/flask/_compat.py", line 34, in reraise raise value.with_traceback(tb) File "/usr/lib/python3.6/site-packages/flask/app.py", line 1813, in full_dispatch_request rv = self.dispatch_request() File "/usr/lib/python3.6/site-packages/flask_debugtoolbar/__init__.py", line 125, in dispatch_request return view_func(**req.view_args) File "/usr/lib/python3.6/site-packages/flask_restful/__init__.py", line 462, in wrapper return self.make_response(data, code, headers=headers) File "/usr/lib/python3.6/site-packages/flask_restful/__init__.py", line 491, in make_response resp = self.representations[mediatype](data, *args, **kwargs) File "/usr/lib/python3.6/site-packages/flask_restful/representations/json.py", line 21, in output_json dumped = dumps(data, **settings) + "\n" File "/usr/lib/python3.6/json/__init__.py", line 238, in dumps **kw).encode(obj) File "/usr/lib/python3.6/json/encoder.py", line 201, in encode chunks = list(chunks) File "/usr/lib/python3.6/json/encoder.py", line 430, in _iterencode yield from _iterencode_dict(o, _current_indent_level) File "/usr/lib/python3.6/json/encoder.py", line 404, in _iterencode_dict yield from chunks File "/usr/lib/python3.6/json/encoder.py", line 404, in _iterencode_dict yield from chunks File "/usr/lib/python3.6/json/encoder.py", line 325, in _iterencode_list yield from chunks File "/usr/lib/python3.6/json/encoder.py", line 404, in _iterencode_dict yield from chunks File "/usr/lib/python3.6/json/encoder.py", line 325, in _iterencode_list yield from chunks File "/usr/lib/python3.6/json/encoder.py", line 404, in _iterencode_dict yield from chunks File "/usr/lib/python3.6/json/encoder.py", line 437, in _iterencode o = _default(o) File "/usr/lib/python3.6/json/encoder.py", line 180, in default o.__class__.__name__) TypeError: Object of type 'datetime' is not JSON serializable

Solía funcionar cuando estaba redactando plantillas con Flask en el backend, pero ahora con las solicitudes de frontend, se rompe con el error anterior.

¿Qué está mal ahora? ¿Por qué mi función de serialización ya no funciona?

over 4 years ago · Santiago Trujillo
2 answers
Answer question

0

Vea a continuación (usando un codificador JSON personalizado)

Ver http://flask.pocoo.org/snippets/119/ también

 import datetime import json class DateTimeEncoder(json.JSONEncoder): def default(self, z): if isinstance(z, datetime.datetime): return (str(z)) else: return super().default(z) my_dict = {'date': datetime.datetime.now()} print(json.dumps(my_dict,cls=DateTimeEncoder))

producción

 {"date": "2019-06-12 15:44:14.978766"}
over 4 years ago · Santiago Trujillo Report

0

Como se señaló en los comentarios en la respuesta aceptada, simplemente puede usar:

 json.dumps(my_dict, default=str)

A menos que quieras hacerlo más complicado por alguna razón.

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!