Каков самый простой способ автоматического преобразования вложенных классов данных JSON в Python?Python

Программы на Python
Anonymous
Каков самый простой способ автоматического преобразования вложенных классов данных JSON в Python?

Сообщение Anonymous »

Я работаю со сложными вложенными ответами JSON из API и хочу преобразовать их в строго типизированные классы данных Python для лучшего завершения кода и безопасности типов.
В настоящее время я вручную создаю классы данных для каждой структуры JSON, что утомительно и подвержено ошибкам, особенно когда JSON имеет несколько уровней вложенности. Например:

Код: Выделить всё

{
"user": {
"id": 12345,
"personal_info": {
"name": "John Doe",
"email": "john@example.com",
"contact": {
"phone": "9876543210",
"address": "123 Main St"
}
},
"preferences": {
"language": "en",
"notifications": true
}
}
}
Я хочу автоматически генерировать классы данных Python следующим образом:

Код: Выделить всё

@dataclass
class Contact:
phone: str
address: str

@dataclass
class PersonalInfo:
name: str
email: str
contact: Contact

@dataclass
class Preferences:
language: str
notifications: bool

@dataclass
class User:
id: int
personal_info: PersonalInfo
preferences: Preferences
Что я пробовал:
  • Использование json.loads() дает мне dicts, но я теряю безопасность типов и автозаполнение IDE
  • Написание классов данных вручную работает, но отнимает много времени для больших структур JSON
  • Рассмотрено pydantic, но для этого все равно требуется определение схемы вручную
Вопрос: Существует ли инструмент или библиотека, которая может автоматически генерировать определения классов данных Python из образца JSON? В идеале что-то, что:

[*]Рекурсивно обрабатывает вложенные объекты

[*]Выводит правильные типы (int, str, bool, list и т. д.)

[*]Генерирует готовый к импорту код Python

[*]Может запускаться как инструмент CLI или использоваться программно
Что я ищу

[*] ✅ Автоматическое создание из образца JSON

[*] ✅ Поддержка вложенных объектов

[*] ✅ Вывод типа

[*] ✅ Поддержка автозаполнения IDE

Вернуться в «Python»