Как десериализовать структуру bjson в схему зефира
Я пытаюсь преобразовать структуру bjson в схему из библиотеки зефира.
Ниже приведена схема зефира:
class GeneSchema(Schema):
"""description of class"""
id_entrez = fields.Integer(required = True, error_messages={'required': "The 'id_entrez' field is requeired."})
symbol = fields.String()
@validates('id_entrez')
def validate_id_entrez(self, data):
if data <= 0:
raise ValidationError("The 'id_entrez' field must be greater than zero.")
Ниже bjson будет преобразован в схему:
[{"symbol": "VAMP4", "_id": {"$oid": "57ae3b175a945932fcbdf41d"}, "id_entrez": 8674}, {"symbol": "CCT5", "_id": {"$oid": "57ae3b175a945932fcbdf41e"}, "id_entrez": 22948}]
Обратите внимание, что bjson имеет "_id" в качестве ObjectId - "$oid". Это потому, что результат запроса с использованием mongodb.
Пожалуйста, кто-нибудь знает, почему бы не правильно конвертировать из bjson в схему зефира?
Спасибо вам всем!
2 ответа
Я не знаю, актуален ли этот вопрос, но я хотел бы показать свое решение, как передать ObjectId в схему Marshmallow:
Я просто использую метод предварительной обработки pre_load для преобразования ObjectId в строку:
@pre_load
def convert_objectid(self, in_data, **kwargs):
if "_id" in in_data:
in_data["_id"] = str(in_data["_id"])
return in_data
Вы все еще можете использовать свою схему для анализа выходных данных MongoDB, просто игнорируйте дополнительное поле "_id". Если, с другой стороны, вы хотите проанализировать этот "_id", просто добавьте дополнительное необязательное поле в вашу схему.