[Python] JSON Serialize a Python Class

Marco Olimpi badstorm a gmail.com
Dom 12 Gen 2014 13:00:09 CET


Scusate, l'abitudine di scrivere in inglese! :P

Premetto che sono un programmatore C# e sto passando a Python. Quindi
leggendo documentazione su internet ho trovato questi mediti di
dichiarazione delle classi.

Ti ringrazio per i suggerimenti e provo subito.

Grazie ancora.

Ciao

Marco


2014/1/11 Valerio Maggio <valerio.maggio a gmail.com>

>
> On 11 Jan 2014, at 18:46, Marco Olimpi <badstorm a gmail.com> wrote:
>
> Hi,
>
>
> Ciao.
> Non so perché tu abbia postato in Inglese (forse mero copia incolla da un
> post in altra lista), ma leggendo l'inglese deduco che possa risponderti
> tranquillamente in Italiano :P
>
> *class User():*
> *  def __init__(self, _name, _lastname):*
> *       self.Name = _name*
> *       self.LastName = _lastname*
>
> *class News():*
> *  def __init__(self, _news,_user):*
> *       self.News = _news*
> *       self.User = _user*
>
>
> Voglio solo farti notare che questo modo di definire le classi è un
> cattivo idioma (sia in Python 2 che Python 3).
> Per inciso:
>
> (Python 2)
> class News(object):
>     […]
>
> (Python 3)
> class News:
>     […]
>
> L'argomento è stato ampiamente trattato altrove e un buon manuale può
> risolverti qualsiasi dubbio.
>
>
> than i create my class in my code:
>
> ...
> *myUser = User("Mario","Rossi")*
> *myNews = News("My last news", myUser)*
>
> *JSONstring = dumps(myNews)*
> ...
>
>
> Tornando a noi: deduco che tu stia utilizzando `simplejson.dumps`
>
> but in the last line of code i get the error that the News class is not
> JSON serializable.
>
>
> Anche in questo caso, la questione è arci-nota. Basterebbe google per
> questo!
> Ad ogni modo:
> http://simplejson.readthedocs.org/en/latest/#encoders-and-decoders
>
> La questione è che devi definire un `custom_encoder` per codificare un
> oggetto custom.
> Banalmente questo:
>
> def custom_encoder(obj):
>     if isinstance(obj, News):
>         return obj.to_json()
>     return simplejson.encoder(obj)
>
> JSONstring = dumps(range(2), default=custom_encoder)
>
> dovrebbe risolverti il problema.
> Quello che ti resta da fare è implementare il metodo `to_json` nella
> classe `News` che faccia al caso tuo, ricordando quali siano le conversioni
> di tipo Python2JSON di default
> (trovi una tabella a riguardo nella documentazione che ti ho segnalato).
>
> Ciao
> --
> valerio
>
>
>
-------------- parte successiva --------------
Un allegato HTML è stato rimosso...
URL: <http://lists.python.it/pipermail/python/attachments/20140112/1be2dac3/attachment.html>


Maggiori informazioni sulla lista Python