J'essaie de créer une fonction Django pour JSON sérialiser quelque chose et le renvoyer dans un objet HttpResponse
.
def json_response(something):
data = serializers.serialize("json", something)
return HttpResponse(data)
Je l'utilise comme ceci:
return json_response({ howdy : True })
Mais je reçois cette erreur:
"bool" object has no attribute "_meta"
Des idées?
EDIT: Voici le traceback:
Mise à jour: Python a maintenant son propre gestionnaire json, utilisez simplement import json
au lieu d'utiliser simplejson
.
Le module Django serializers est conçu pour sérialiser les objets ORM Django. Si vous voulez encoder un dictionnaire Python Python $ ===) normal, vous devez utilisez simplejson, qui est livré avec Django au cas où vous ne l'avez pas déjà installé.
import json
def json_response(something):
return HttpResponse(json.dumps(something))
Je suggère de le renvoyer avec un en-tête Content-Type application/javascript (vous pouvez également utiliser application/json mais cela vous empêchera de déboguer dans votre navigateur):
import json
def json_response(something):
return HttpResponse(
json.dumps(something),
content_type = 'application/javascript; charset=utf8'
)
Qu'en est-il d'une classe JsonResponse qui s'étend 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')
Avec les nouvelles versions de Django vous pouvez simplement utiliser JsonResponse fourni par Django.http:
from Django.http import JsonResponse
def my_view(request):
json_object = {'howdy': True}
return JsonResponse(json_object)
Vous pouvez trouver plus de détails dans les documents officiels .
Dans python 2.6 et supérieur il y a un Nice bibliothèque JSON , qui a de nombreuses fonctions parmi lesquelles json.dumps () qui sérialise un objet dans une chaîne.
Vous pouvez donc faire quelque chose comme ceci:
import json
print json.dumps({'howdy' : True })
import json
my_list = range(1,10) # a list from 1 to 10
with open('theJsonFile.json', 'w') as file_descriptor:
json.dump(my_list, file_descriptor) #dump not dumps, dumps = dump-string