[Python] JSON Serialize a Python Class
Valerio Maggio
valerio.maggio a gmail.com
Sab 11 Gen 2014 19:16:47 CET
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/20140111/a860a8c3/attachment.html>
Maggiori informazioni sulla lista
Python