Преобразование JSON в набор вложенных классов PythonPython

Программы на Python
Ответить
Anonymous
 Преобразование JSON в набор вложенных классов Python

Сообщение Anonymous »

Мне нужно обработать несколько сообщений в формате JSON. Каждое сообщение имеет свою вложенную структуру. Я хотел бы создать Python SDK для обработки этих сообщений. Моя идея состоит в том, чтобы сопоставить каждую структуру JSON с набором вложенных классов Python. Сейчас я делаю это вручную. Но это утомительная задача.
Пример сообщения в формате JSON приведен ниже:

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

{
"GlobalGnbId": {
"PlmnIdentity": {
"Data": [
19,
241,
132
]
},
"GnbId": {
"Value":   1,
"Length": 22
}
},
"OptionalGnbDuId": 1
}
Ниже вы найдете мой собственный набор классов Python, созданных вручную для работы с этим сообщением JSON:

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

class PlmnIdentity(BaseModel):
"""Class for PLMN identity"""
Data: list[int]

class GnbId(BaseModel):
"""Class for gNodeB ID"""
Value:  int
Length: int

class GlobalGnbId(BaseModel):
"""Class for global gNodeB ID"""
PlmnIdentity:    PlmnIdentity
GnbId:           GnbId

class NodeId(BaseModel):
"""Class for node ID"""
GlobalGnbId:     GlobalGnbId
OptionalGnbDuId: int
Наконец, ниже приведен полный минимальный пример:

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

from pydantic import BaseModel, TypeAdapter

import json

class PlmnIdentity(BaseModel):
"""Class for PLMN identity"""
Data: list[int]

class GnbId(BaseModel):
"""Class for gNodeB ID"""
Value:  int
Length: int

class GlobalGnbId(BaseModel):
"""Class for global gNodeB ID"""
PlmnIdentity:    PlmnIdentity
GnbId:           GnbId

class NodeId(BaseModel):
"""Class for node ID"""
GlobalGnbId:     GlobalGnbId
OptionalGnbDuId: int

node_id_str = \
"""
{
"GlobalGnbId": {
"PlmnIdentity": {
"Data": [
19,
241,
132
]
},
"GnbId": {
"Value":   1,
"Length": 22
}
},
"OptionalGnbDuId": 1
}
"""

# NodeId as class
node_id_class = TypeAdapter(NodeId).validate_json(node_id_str)

print(node_id_class)

print(node_id_class.GlobalGnbId)
print(node_id_class.GlobalGnbId.PlmnIdentity)
print(node_id_class.GlobalGnbId.PlmnIdentity.Data)

print(node_id_class.GlobalGnbId.GnbId)
print(node_id_class.GlobalGnbId.GnbId.Value)
print(node_id_class.GlobalGnbId.GnbId.Length)

print(node_id_class.OptionalGnbDuId)

# NodeId as dictionary
node_id_dict = node_id_class.model_dump()

print(node_id_dict)
Мой вопрос: существует ли автоматический или полуавтоматический способ сопоставить вложенное сообщение JSON с набором классов Python?

Подробнее здесь: https://stackoverflow.com/questions/792 ... on-classes
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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