2010-01-27 14 views
24

Estoy enviando información entre el cliente y el servidor de Django, y me gustaría usar JSON para esto. Estoy enviando información simple - lista de cadenas. He intentado utilizar django.core.serializers, pero cuando lo hice, lleguéLista de serialización a JSON

AttributeError: 'str' object has no attribute '_meta' 

Parece que esto sólo se puede utilizar para objetos de Django. ¿Cómo puedo serializar objetos simples de Python?

+2

¿Puede incluir un fragmento del código real que usó realmente que produjo este error? –

Respuesta

46

Puede usar Python puro para hacerlo:

import json 
list = [1, 2, (3, 4)] # Note that the 3rd element is a tuple (3, 4) 
json.dumps(list) # '[1, 2, [3, 4]]' 
+2

Oh, es un nuevo módulo en 2.6, no tengo que usar simplejson. Muchas gracias :-) – gruszczy

+0

Simplemente no puedo analizar el archivo JSON descargado, porque en este archivo, JSON_ARRAY es el hijo directo de otro JSON_ARRAY. –

4

Si usando Python 2.5, puede que tenga que importar simplejson:

try: 
    import json 
except ImportError: 
    import simplejson as json 
2

Sí, pero entonces, ¿qué hacer acerca de la django ¿objetos? JSON simple tiende a ahogarse con ellos.

Si los objetos son objetos de modelo individuales (no QuerySets, por ejemplo), que han almacenado en ocasiones el tipo de modelo de objetos y el pk, así:

seralized_dict = simplejson.dumps(my_dict, 
        default=lambda a: "[%s,%s]" % (str(type(a)), a.pk) 
        ) 

a deserializar, se puede reconstruir el objeto referenciado con model.objects.get(). Esto no ayuda si está interesado en los detalles del objeto en el tipo en que se almacena el dict, pero es eficaz si todo lo que necesita saber es qué objeto estaba involucrado.

Cuestiones relacionadas