2010-01-27 17 views
24

Sto inviando informazioni tra client e server Django, e vorrei usare JSON per questo. Sto inviando informazioni semplici - elenco di stringhe. Ho provato ad utilizzare django.core.serializers, ma quando l'ho fatto, ho avutoSerializzazione dell'elenco su JSON

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

Sembra che questo può essere utilizzato solo per gli oggetti Django. Come posso serializzare oggetti semplici, Python?

+2

È possibile includere uno snippet del codice effettivamente utilizzato che ha prodotto questo errore? –

risposta

46

È possibile utilizzare Python puro per farlo:

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, è un nuovo modulo in 2.6, non devo usare simplejson. Grazie mille :-) – gruszczy

+0

Semplicemente non riesco ad analizzare il file JSON scaricato, perché in questo file, JSON_ARRAY è il figlio diretto di un altro JSON_ARRAY. –

4

Se si utilizza Python 2.5, potrebbe essere necessario importare simplejson:

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

Sì, ma allora che cosa fare circa il Django oggetti? la semplice Jones tende a soffocarli.

Se gli oggetti sono i singoli oggetti del modello (non querysets, ad esempio), ho a volte memorizzato il tipo di modello a oggetti e il pk, in questo modo:

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

a de-serialize, è possibile ricostruire l'oggetto referenziato con model.objects.get(). Questo non aiuta se sei interessato ai dettagli dell'oggetto nel tipo in cui è memorizzato il dict, ma è efficace se tutto ciò che devi sapere è quale oggetto è stato coinvolto.

Problemi correlati