Python des objets sérialisables json
class gpagelet:
"""
Holds 1) the pagelet xpath, which is a string
2) the list of pagelet shingles, list
"""
def __init__(self, parent):
if not isinstance( parent, gwebpage):
raise Exception("Parent must be an instance of gwebpage")
self.parent = parent # This must be a gwebpage instance
self.xpath = None # String
self.visibleShingles = [] # list of tuples
self.invisibleShingles = [] # list of tuples
self.urls = [] # list of string
class gwebpage:
"""
Holds all the datastructure after the results have been parsed
holds: 1) lists of gpagelets
2) loc, string, location of the file that represents it
"""
def __init__(self, url):
self.url = url # Str
self.netloc = False # Str
self.gpagelets = [] # gpagelets instance
self.page_key = "" # str
Est-il un moyen pour moi de faire ma classe json sérialisable? La chose que je suis inquiet est la référence récursive.
- cette réponse pourrait être utile: stackoverflow.com/a/28253689/303114
- vous question du titre est très vague. Vous devez améliorer.
- même question avec un fermé de réponse: stackoverflow.com/a/7409526/2728644
Vous devez vous connecter pour publier un commentaire.
Écrire votre propre encodeur et le décodeur, ce qui peut être très simple comme
return __dict__
par exemple, voici un codeur pour vider totalement récursive de l'arbre de la structure, vous pouvez améliorer ou les utiliser comme il est pour votre propre usage
il imprime
vous pouvez même écrire un décodeur, mais là, vous allez en quelque sorte besoin d'identifier les est il est de votre objet ou pas, donc peut-être vous pouvez mettre un type trop si nécessaire.
[simple]json.JSONEncoder
sous-classe et de remplacer ledefault
méthode avec une version qui de retour d'un serializable représentation de vos objets ou des appelsJSONEncoder.default
pour tous les autres types. Voir docs.python.org/library/json.html#json.JSONEncoder.jsonpickle POUR LA VICTOIRE!
(Juste eu cette même question... json pickle poignées récursive/objet imbriqué des graphiques ainsi que des courts-circuits pour les graphes d'objets).
Réponse indirecte: au lieu d'utiliser JSON, vous pouvez utiliser YAML, qui n'a pas de problème à faire ce que vous voulez. (JSON est essentiellement un sous-ensemble de YAML.)
Exemple:
En fait, YAML bien poignées cyclique références pour vous.
load()
, maisdump()
).load()
le YAMLdumped
par le code ci-dessus (il ne peut pas conduire à l'interprétation du code Python, bar d'un bug dans PyYAML, comme le code source montre [pas de code Python injection...]).J'ai mis en place un système très simple
todict
méthode avec l'aide de https://stackoverflow.com/a/11637457/1766716__
Et utilisé
getattr
pour construire le dictionnaire.Ma solution pour cela est d'étendre le 'dict' classe et effectuer des contrôles autour obligatoire/attributs autorisés en substituant init, mise à jour, et de définir les méthodes de la classe.
Exemple d'utilisation: