Запрос
Мне было интересно, можно ли взять поведение по умолчанию jsons.dump
и сделать его идемпотентным (вернуть строку ввода) для IP-адресов Python.
Это позволило бы мне использовать объект в Python и использовать одну и ту же строку во всех сериализациях и десериализации. Таким образом, когда мы загружаем сериализованный JSON, нам не нужны разные пути управления для первой программы, которая загружает данные, и второй программы + N, которая их загружает.
Текущее поведение
>>> import ipaddress
>>> import jsons
>>> import ipaddress
>>> ipaddress.IPv4Address("192.0.0.1")
IPv4Address('192.0.0.1')
>>> jsons.dump(ipaddress.IPv4Address("192.0.0.1"))
{'_ip': 3221225473}
>>> jsons.load(jsons.dump(ipaddress.IPv4Address("192.0.0.1")))
{'_ip': 3221225473}
Желаемое поведение
>>> jsons.load(jsons.dump(ipaddress.IPv4Address("192.0.0.1")))
"192.0.0.1"
Желаемый, но, вероятно, слишком много спрашивает
>>> jsons.load(jsons.dump(ipaddress.IPv4Address("192.0.0.1")))
IPv4Address('192.0.0.1')
Текущее решение
На данный момент я изменил метод __repr__
для преобразования типов в строку. Но это означает, что я должен сделать jsons.dump(repr(<variable>))
, и это означает, что другие разработчики, работающие с моим кодом, имеют потенциальную мину, о которой они должны знать.