Verwenden von JSON-Schlüsseln als Attribute in geschachtelten JSON

8

Ich arbeite mit verschachtelten JSON-ähnlichen Datenstrukturen in Python 2.7, die ich mit einem fremden Perl-Code tausche. Ich will nur mit diesen verschachtelten Strukturen von Listen und Wörterbüchern auf amore pythonalem Weg arbeiten.

Wenn ich also eine Struktur wie diese habe ...

%Vor%

... Ich möchte in einem Python-Skript damit umgehen können, als wäre es verschachtelte Python-Klassen / Structs, wie folgt:

%Vor%

Somit ist aa ein Proxy in die ursprüngliche Struktur. Dies ist, was ich bis jetzt gefunden habe, inspiriert von der exzellenten Was ist eine Metaklasse in Python? ? Frage.

%Vor%

Nun frage ich mich, ob es eine elegante Möglichkeit gibt, einen ganzen Satz der __*__ -Spezialfunktionen abzubilden, wie __iter__ , __delitem__ ? also muss ich die Dinge nicht mit p2j() auspacken, nur um zu iterieren oder andere pythonische Sachen zu machen.

%Vor%     
Susanne Oberhauser 05.04.2012, 10:22
quelle

3 Antworten

3

Es gibt eine attrdict-Bibliothek , die genau das auf eine sehr sichere Art und Weise tut, aber wenn Sie wollen, schnell und schmutzige (möglicherweise undichte Speicher) Ansatz wurde in diese Antwort gegeben :

%Vor%     
Yurik 14.08.2014, 22:29
quelle
11

Ich denke, du machst das komplexer, als es sein muss. Wenn ich Sie richtig verstehe, müssen Sie nur Folgendes tun:

%Vor%

Wenn Sie JSON laden, können Sie mit dem Parameter object_hook ein aufrufbares Objekt zum Verarbeiten von geladenen Objekten angeben. Ich habe es gerade benutzt, um das dict in ein Objekt zu verwandeln, das den Attributzugriff auf seine Schlüssel erlaubt. Google Docs

    
Thomas K 05.04.2012 11:51
quelle
1

Ich habe die Antwort gefunden: Es gibt absichtlich keine Möglichkeit zur automatischen Zuordnung die speziellen Methoden in Python mit __getattribute__ . Um das zu erreichen, was ich will, muss ich explizit alle speziellen Methoden wie __len__ nacheinander definieren.

    
Susanne Oberhauser 17.04.2012 11:25
quelle

Tags und Links