2010-06-10 6 views
4

J'ai ce problème fondamental,Dans Django: comment sérialiser un objet dict en json?

>>> from django.core import serializers 
>>> serializers.serialize("json", {'a':1}) 
Traceback (most recent call last): 
    File "<console>", line 1, in <module> 
    File "/usr/lib/pymodules/python2.6/django/core/serializers/__init__.py", line 87, in serialize 
    s.serialize(queryset, **options) 
    File "/usr/lib/pymodules/python2.6/django/core/serializers/base.py", line 40, in serialize 
    for field in obj._meta.local_fields: 
AttributeError: 'str' object has no attribute '_meta' 
>>> 

Comment cela peut-il être fait?

+0

jetez un oeil sur ma réponse s'il vous plaît. – andi

Répondre

14

De plus, puisque vous semblez en utilisant Python 2.6, vous pouvez simplement utiliser le module json directement:

import json 
data = json.dumps({'a': 1}) 
+4

Les sérialiseurs Django sont pour les objets de modèle Django et QuerySets. C'est pourquoi il cherche un champ _meta. – JCotton

+0

Et le sérialiseur natif ne fait pas le travail: TypeError: [email protected]> n'est pas sérialisable JSON –

6
from django.utils import simplejson 
data = simplejson.dumps({'a': 1}) 
+0

Cela fonctionne très bien avec les objets python, mais pas aussi bien avec les ensembles de requêtes Django. –

+0

@Ted: Bien sûr que non. Pour sérialiser les ensembles de requêtes, faites ce que la question montre. –

+0

On dirait que les gars de Django ont décidé de s'en tenir au module json intégré. À la fin de 2013, simplejson est obsolète et devrait être remplacé par json. https://github.com/pythonforfacebook/facebook-sdk/issues/106 –

0

Les bibliothèques comme json ou simplejson ne sont pas vraiment cool dans le but de sérialisation objets django , lorsque vous pouvez utiliser le sérialiseur de django.core dans vos vues:

from django.core import serializers 


def json_for_model_instance(request, pk):  
    instance = YourModel.objects.get(pk=pk) 
    serialized_instance = serializers.serialize('json', [instance, ]) 

    return HttpResponse(serialized_instance, content_type="application/json") 
Questions connexes