Mes modèles ont tous une méthode qui convertit le modèle à un dictionnaire:Python StructuredProperty au dictionnaire
def to_dict(model):
output = {}
SIMPLE_TYPES = (int, long, float, bool, dict, basestring, list)
for key, prop in model._properties.iteritems():
value = getattr(model, key)
if value is None:
continue
if isinstance(value, SIMPLE_TYPES):
output[key] = value
elif isinstance(value, datetime.date):
dateString = value.strftime('%Y-%m-%d %H:%M:%S.%f')[:-3]
output[key] = dateString
elif isinstance(value, ndb.Model):
output[key] = to_dict(value)
else:
raise ValueError('cannot encode ' + repr(prop))
return output
Maintenant, un de mes modèles, X
, a une LocalStructuredProperty
:
metaData = ndb.LocalStructuredProperty(MetaData, repeated=True)
Ainsi, répété = True signifie qu'il s'agira d'une liste d'objets MetaData. MetaData
est un autre modèle, et il a également la même méthode to_dict
.
Cependant, quand je l'appelle json.dumps(xInstance.to_dict())
, je reçois une exception:
raise TypeError(repr(o) + " is not JSON serializable")
TypeError: MetaData(count=0, date=datetime.datetime(2012, 9, 19, 2, 46, 56, 660000), unique_id=u'8E2C3B07A06547C78AB00DD73B574B8C') is not JSON serializable
Comment puis-je gérer cela?
On ne sait pas comment votre définition est une méthode d'instance. On ne sait pas non plus ce que vous essayez de sérialiser. Si vous essayez de sérialiser la méthode 'X.to_dict' cela échouera certainement. – bossylobster
Presque positifs, ils ont juste oublié les parenthèses lors de la publication de la question. –
Désolé, il aurait dû être xInstance.to_dict() plutôt que X.to_dict ... mais c'était juste une faute de frappe sur SO, le problème existe toujours dans la vraie vie – Snowman