2017-09-19 1 views
0

Ich habe im Internet gesucht und konnte kein einfaches Beispiel zum Codieren und Decodieren eines benutzerdefinierten Objekts mit JSON in Python finden.JSON Serialisierung von benutzerdefinierten Objekten (Codierung und Decodierung)

Lassen Sie uns sagen, dass ich die folgende Klasse haben:

class Test: 
    def __init__(self, name=None, grade=None): 
     self.name = name 
     self.grade = grade 

und haben auch eine Liste der Testobjekte:

t1 = Test("course1", 80) 
t2 = Test("course2", 90) 

list_of_tests = [t1, t2] 

Wie kann ich die Klasse Test und das Objekt list_of_tests serialisiert mit JSON? Ich möchte in der Lage sein, es in eine Datei zu schreiben und es aus einer Datei mit Python zu lesen.

Antwort

0

Um ehrlich zu sein, ist es am einfachsten, manuell eine Liste von Wörterbüchern aus Ihren Objekten zu erstellen. Dann können Sie das direkt an die JSON-Funktionen übergeben.

data = [{'name': x.name, 'grade': x.grade} for x in list_of_tests] 
with open('output.json', 'w') as out: 
    json.dump(data, out) 

und lesen Sie es zurück:

with open('output.json') as inp: 
    data = json.load(inp) 
    list_of_tests = [Test(x['name'], x['grade']) for x in data] 
+0

noch nicht upvote Kann, aber dank! Hab es jetzt verstanden! – Infected

0

Sie können steuern, wie ein nicht erkanntes Objekt durch Sicherungen serialisiert wird (default = converter_function). Damit es ein gültiges JSON-Objekt ist, müssten Sie ein einfaches dict mit den gewünschten Feldern sowie ein Tag-Feld zurückgeben, das angibt, dass es speziell durch Ladevorgänge behandelt werden soll.

Dann haben Sie eine andere Konverterfunktion, um den Prozess umzukehren, der an ladies() als object_hook übergeben wird.

Verwandte Themen