Questo tipo di errore si verifica in Python quando si vuole convertire l'istanza di una classe nel formato JSON.
Gli oggetti definiti dall'utente, ossia le istanze di specifiche classi, necessitano di una classe intermedia che converta la loro rappresentazione interna in un dizionario. I dizionari, infatti, sono tra i tipi di dati che possono essere direttamente serializzati come JSON.
La classe intermedia dovrà estendere la classe core JSONEncoder
del modulo json
della standard library. Ecco un esempio:
import json
from json import JSONEncoder
class User:
def __init__(self, name):
self.name = name
class UserEncoder(JSONEncoder):
def default(self, o):
return o.__dict__
La classe UserEncoder
dovrà poi essere passata come riferimento tramite il parametro cls
ai metodi del modulo json
che serializzano i dati in formato JSON. Ad esempio se volessimo salvare su file un'istanza della nostra classe User
, scriveremo:
user = User('Gabriele')
with open('user.json', 'w') as f:
json.dump(user, f, cls=UserEncoder)
L'output del file JSON creato nella directory corrente sarà il seguente:
{"name": "Gabriele"}