Я пытаюсь использовать схему Marshmallow для сериализации объекта python. Ниже приведена схема, которую я определил для своих данных.
from marshmallow import Schema, fields
class User:
def __init__(self, name = None, age = None, is_active = None, details = None):
self.name = name
self.age = age
self.is_active = is_active
self.details = details
class UserSchema(Schema):
name = fields.Str()
age = fields.Int()
is_active = fields.Bool()
details = fields.Dict()
Ввод будет в формате словаря, а все значения будут в виде строки.
user_data = {"name":"xyz", "age":"20", "is_active": 'true',"details":"{'key1':'val1', 'key2':'val2'}"}
Когда я пытаюсь запустить приведенный ниже фрагмент, значения age и is_active были преобразованы в соответствующий тип данных, но подробности остались без изменений .
user_schema = UserSchema()
user_dump_data = user_schema.dump(user_data)
print(user_dump_data)
Вывод:
{'name': 'xyz', 'is_active': True, 'details': "{'key1':'val1', 'key2':'val2'}", 'age': 20}
Мне нужно сериализовать входные данные в соответствующий тип данных, который я определил в своей схеме. Что я делаю неправильно? Может ли кто-нибудь посоветовать мне, как добиться этого с помощью Marshmallow?
Я использую
python 3.6
marshmallow 3.5.1
Edit
Указанные выше входные данные получены из HBase . По умолчанию HBase хранит все свои значения как байты и возвращает как байты. Ниже представлен формат, который я получил из HBase
{b'name': b'xyz', b'age': b'20', b'is_active': b'true', b'details': b"{'key1':'val1', 'key2':'val2'}"}
Затем я декодирую этот словарь и передаю его в свой UserSchema, чтобы сериализовать его для использования в веб-API.