How do I JSON serialize a Python dictionary?

Viewed 70985

I'm trying to make a Django function for JSON serializing something and returning it in an HttpResponse object.

def json_response(something):
    data = serializers.serialize("json", something)
    return HttpResponse(data)

I'm using it like this:

return json_response({ howdy : True })

But I get this error:

"bool" object has no attribute "_meta"

Any ideas?

EDIT: Here is the traceback:

http://dpaste.com/38786/

5 Answers

Update: Python now has its own json handler, simply use import json instead of using simplejson.


The Django serializers module is designed to serialize Django ORM objects. If you want to encode a regular Python dictionary you should use simplejson, which ships with Django in case you don't have it installed already.

import json

def json_response(something):
    return HttpResponse(json.dumps(something))

I'd suggest sending it back with an application/javascript Content-Type header (you could also use application/json but that will prevent you from debugging in your browser):

import json

def json_response(something):
    return HttpResponse(
        json.dumps(something),
        content_type = 'application/javascript; charset=utf8'
    )

What about a JsonResponse Class that extends HttpResponse:

from django.http import HttpResponse
from django.utils import simplejson

class JsonResponse(HttpResponse):
    def __init__(self, data):
        content = simplejson.dumps(data,
                                   indent=2,
                                   ensure_ascii=False)
        super(JsonResponse, self).__init__(content=content,
                                           mimetype='application/json; charset=utf8')
Related