Как преобразовать данные 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
спасибо Подтверждение поздно. Это именно то решение, которое я искал.