Kakaji Kakaji - 7 months ago 34
Python Question

Django Rest Framework Response is not JSON serializable error

I have the following custom exception handler in Django REST framework.

class ErrorMessage:
def __init__(self, message):
self.message = message

def insta_exception_handler(exc, context):
response = {}

if isinstance(exc, ValidationError):
response['success'] = False
response['data'] = ErrorMessage("Validation error")

return Response(response)


I want a JSON output as shown below

"success":false,
"data":{ "message" : "Validation error" }


But I get the error
TypeError: Object of type 'ErrorMessage' is not JSON serializable
. Why is a class as simple as
ErrorMessage
above not JSON serializable? How can I solve this problem?

Answer Source

It is not serializable because it is an object, it should be dict, list or plain value. But you can easily fix your problem by using magic property __dict__

def insta_exception_handler(exc, context):
    response = {}

    if isinstance(exc, ValidationError):
        response['success'] = False
        # like this
        response['data'] = ErrorMessage("Validation error").__dict__

    return Response(response)