import json import re from dataclasses import dataclass from typing import Optional reasn = re.compile(r"^AS(\d+)$") def parse_asn(text: str) -> Optional[int]: match = reasn.match(text) if match: return int(match.group(1)) @dataclass class ASPA: customer: int providers: list[int] ta: str @classmethod def from_dict(cls, d): try: customer = parse_asn(d['customer']) providers = list(map(parse_asn, d['providers'])) return cls(customer, providers, d['ta']) except (KeyError, TypeError): return None def parse_json(data: str) -> list[ASPA]: data = json.loads(data) return list(filter(None, map(ASPA.from_dict, data.get('aspas', []))))