2010-03-06 19 views
11

Estoy tratando de encontrar una manera de serializar algún modelo de objetos de Django a formato JSON, algo así como:Django serializador para un objeto

j = Job.objects.get(pk=1) 
############################################## 
#a way to get the JSON for that j variable??? 
############################################## 

no quiero:

from django.core import serializers 
serializers.serialize('json', Job.objects.get(pk=1),ensure_ascii=False) 

Porque devuelve matriz JSON, no una representación de un solo objeto.

¿Alguna idea?

Una forma en la que estoy pensando: es encontrar una forma de obtener un hash (atributo, valor) del objeto y luego usar simplejson para obtener la representación JSON de él, sin embargo, no sé cómo obtener ese hash.

Respuesta

22

¿Qué tal simplemente masajear lo que obtienes de serializers.serialize? No es tan difícil recortar los corchetes desde la parte frontal y posterior del resultado.

job = Job.objects.get(pk=1) 
array_result = serializers.serialize('json', [job], ensure_ascii=False) 
just_object_result = array_result[1:-1] 

No es una respuesta elegante, pero le dará solo el objeto en notación json.

+0

que trabajó para mí. Gracias – khelll

4

Sugeriría usar Django's model_to_dict. Si no me equivoco, también se basa en serializers.serialize(), pero solo funciona para list, y no en la instancia del modelo único. Así es como se obtiene una instancia dict con los campos del modelo de un único modelo:

from django.forms.models import model_to_dict 

# assuming obj is your model instance 
dict_obj = model_to_dict(obj) 

Ahora sólo tiene una recta json.dumps llamada:

import json 
json.dumps(dict_obj) 
+0

Maldita sea, eso era exactamente lo que estaba buscando. – Broccoli

Cuestiones relacionadas