Как преобразовать данные JSON в класс Python?
class AnotherClass():
test: int
class MyClass():
a: int
c: AnotherClass
json = {
"a": 1,
"c": {
"test": 2
}
}
my_class = MyClass(json)
print(my_class.a) # 1
print(my_class.c.test) # error
Я пробовал использовать атрибут _dict_, но переменной в классе-члене не присваивается значение.
Есть ли способ проанализировать json и входные данные до переменной класса-члена без ручного присвоения значений?
class MyClass():
a: int
c: AnotherClass
def __init__(self, json) -> None:
self.__dict__ = json
my_class = MyClass(json)
print(my_class.a) # 1
print(my_class.c.test) # AttributeError: 'dict' object has no attribute 'test'
Чтобы c содержал экземпляр AnotherClass, вам нужно проверить аннотацию типа MyClass и создать экземпляр аннотированного AnotherClass, найденного там, передав ему значения ключа "c". И вам, вероятно, потребуется сделать это рекурсивно для всех классов, чтобы охватить более глубоко вложенные классы. Простое присваивание __dict__ ничего из этого не сделает.
Отвечает ли это на ваш вопрос? Как преобразовать данные JSON в объект Python?
Вы можете использовать dataclasses следующим образом, обратите внимание на особенность __post_init__ для обработки вложенных классов данных:
from dataclasses import dataclass
@dataclass
class AnotherClass:
test: int
@dataclass
class MyClass:
a: int
c: AnotherClass
def __post_init__(self):
self.c = AnotherClass(**self.c)
json = {
"a": 1,
"c": {
"test": 2
}
}
my_class = MyClass(**json)
print(my_class.a) # 1
print(my_class.c.test) # 2
Спасибо Подтверждение поздно. Это именно то решение, которое я искал.