Как преобразовать данные JSON в класс Python?

Как преобразовать данные 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'
stackoverflow.com/q/6578986/3990714
nonamorando 11.11.2022 08:25

Чтобы c содержал экземпляр AnotherClass, вам нужно проверить аннотацию типа MyClass и создать экземпляр аннотированного AnotherClass, найденного там, передав ему значения ключа "c". И вам, вероятно, потребуется сделать это рекурсивно для всех классов, чтобы охватить более глубоко вложенные классы. Простое присваивание __dict__ ничего из этого не сделает.

deceze 11.11.2022 08:26

Отвечает ли это на ваш вопрос? Как преобразовать данные JSON в объект Python?

Robert 11.11.2022 18:31
Мутабельность и переработка объектов в Python
Мутабельность и переработка объектов в Python
Объекты являются основной конструкцией любого языка ООП, и каждый язык определяет свой собственный синтаксис для их создания, обновления и...
Другой маршрут в Flask Python
Другой маршрут в Flask Python
Flask - это фреймворк, который поддерживает веб-приложения. В этой статье я покажу, как мы можем использовать @app .route в flask, чтобы иметь другую...
14 Задание: Типы данных и структуры данных Python для DevOps
14 Задание: Типы данных и структуры данных Python для DevOps
Проверить тип данных используемой переменной, мы можем просто написать: your_variable=100
Python PyPDF2 - запись метаданных PDF
Python PyPDF2 - запись метаданных PDF
Python скрипт, который будет записывать метаданные в PDF файл, для этого мы будем использовать PDF ридер из библиотеки PyPDF2 . PyPDF2 - это...
Переменные, типы данных и операторы в Python
Переменные, типы данных и операторы в Python
В Python переменные используются как место для хранения значений. Пример переменной формы:
Почему Python - идеальный выбор для проекта AI и ML
Почему Python - идеальный выбор для проекта AI и ML
Блог, которым поделился Harikrishna Kundariya в нашем сообществе Developer Nation Community.
0
3
61
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете использовать 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

Спасибо Подтверждение поздно. Это именно то решение, которое я искал.

Yammo 14.11.2022 09:47

Другие вопросы по теме