J'ai un python qui contient des objets avec des __hash__
et __eq__
méthodes afin de s'assurer de l'absence de doublons sont inclus dans la collection.
J'ai besoin d'encoder en json cet ensemble de résultats, mais en passant même un ensemble vide de l' json.dumps
méthode soulève une exception TypeError
File "/usr/lib/python2.7/json/encoder.py", line 201, in encode
chunks = self.iterencode(o, _one_shot=True)
File "/usr/lib/python2.7/json/encoder.py", line 264, in iterencode
return _iterencode(o, 0)
File "/usr/lib/python2.7/json/encoder.py", line 178, in default
raise TypeError(repr(o) + " is not JSON serializable")
TypeError: set([]) is not JSON serializable
Je sais que je peux créer une extension pour le json.JSONEncoder classe qui a une coutume default
méthode, mais je ne suis même pas sûr où commencer dans la conversion de dessus de l'ensemble. Dois-je créer un dictionnaire de l'ensemble des valeurs à l'intérieur de la méthode par défaut, et ensuite de retour à l'encodage? Idéalement, j'aimerais faire la méthode par défaut en mesure de traiter tous les types de données que l'origine de l'encodeur étouffe (je suis à l'aide de Mongo comme une source de données afin dates semblent soulever cette erreur aussi)
Tout soupçon dans la bonne direction serait appréciée.
EDIT:
Merci pour la réponse! Peut-être que j'aurais dû être plus précis.
J'ai utilisé (et upvoted) les réponses ici, afin de contourner les limitations de l'ensemble en cours de traduction, mais leur sont internes clés qui sont un problème.
Les objets dans le jeu sont des objets complexes qui traduisent __dict__
, mais ils peuvent également contenir des valeurs de leurs propriétés qui pourraient être éligibles pour les types de base dans le json de l'encodeur.
Il y a beaucoup de différents types de venir sur ce jeu, et le hachage fondamentalement calcule un identifiant unique pour l'entité, mais dans le véritable esprit de NoSQL, on ne sait pas exactement ce que l'enfant objet.
Un objet peut contenir une valeur de date pour l' starts
, tandis qu'un autre peut avoir une autre schéma qui ne comprend pas de clés contenant "non-prmitive" des objets.
C'est pourquoi la seule solution que je pouvais penser était de prolonger la JSONEncoder pour remplacer l' default
méthode à son tour sur les différents cas - mais je ne suis pas sûr de savoir comment aller à ce sujet, et la documentation est ambiguë. Dans les objets imbriqués, la valeur renvoyée par défaut aller par touche, ou est-il un générique inclure/exclure que regarde l'ensemble de l'objet? Comment est-ce que la méthode d'accueillir imbriquée valeurs? J'ai regardé à travers les questions précédentes et n'arrive pas à trouver la meilleure approche pour le cas spécifique de l'encodage (qui, malheureusement, semble être ce que je vais avoir besoin de le faire ici.)
J'apprécie l'aide!