Сегодня я создавал файл конфигурации, в прошлом я получал доступ к конфигурации в качестве словаря, но на этот раз я думаю об изменении этого. Следующий код создает динамические атрибуты с рекурсивными клавишами объектов.
Но сначала я покажу объект JSON:
{ "key": "value", "list": [ "a", "b", "c", 1, { "key": 1 } ], "object": { "key": { "key": 1 } } }
На конверсии у нас есть 3 случая:
- списки
- DICTS (новый объект)
- bool, int, float и str
import json class AppConfiguration(object): def __init__(self, data=None): if data is None: with open("cfg.json") as fh: data = json.loads(fh.read()) else: data = dict(data) for key, val in data.items(): setattr(self, key, self.compute_attr_value(val)) def compute_attr_value(self, value): if type(value) is list: return [self.compute_attr_value(x) for x in value] elif type(value) is dict: return AppConfiguration(value) else: return value
Теперь ключом, пары значений являются атрибутами – объектами.
instance = AppConfiguration() >>>instance.key 'value' >>>instance.list[4].key 1 >>> instance.object.key.key 1
Оригинал: “https://dev.to/mandrewcito/nested-json-to-python-object–5ajp”