from dataclasses import dataclass, asdict, fields from dacite import from_dict from typing import List import json @dataclass class Punkt: x: float y: float @dataclass class Ziel: #Sensor oder Aktor id: str pos: Punkt @dataclass class Quelle: #Unterverteiler id: str pos: Punkt @dataclass class Pritsche: id: str cords: List[Punkt] @dataclass class Anlage: name: str sensoren: List[Ziel] aktoren: List[Ziel] unterverteiler: List[Quelle] kabelpritschen: List[Pritsche] def to_json(self, pretty: bool = True) -> str: d = self.to_dict() return json.dumps(d, indent=2 if pretty else None, default=str) def to_dict(self) -> dict: """Konvertiert das Objekt in ein dict – datetime wird als ISO-String dargestellt.""" result = asdict(self) # hier um irgendwas ergänzen # result["startdatum"] = self.startdatum.isoformat() return result if __name__ == '__main__': json_string = '''{ "name": "H&M", "sensoren": [ {"id": "S1", "pos": {"x": 3, "y": 5}} ], "aktoren": [ {"id": "A1", "pos": {"x": 3, "y": 5}} ], "unterverteiler": [ {"id": "U1", "pos": {"x": 3, "y": 5}} ], "kabelpritschen": [ {"id": "p1", "cords": [{"x": 3, "y": 5},{"x": 3, "y": 5}]}, {"id": "p2", "cords": [{"x": 3, "y": 5},{"x": 3, "y": 5}]} ] } ''' data = json.loads(json_string) anlage = from_dict( data_class=Anlage, data=data ) print(anlage)