Переименуйте десерализованные поля в дуршлаге

Я использую Colander для преобразования строк JSON в объекты Python и наоборот в проекте на основе Pyramid/Cornice.

Есть ли способ, которым вы можете сериализовать / десериализовать под разными именами / ключами?

Вот схема дуршлаг:

class CommentSchema(MappingSchema):
    resource_id = SchemaNode(Int(), name="resourceID", location="body")
    text = SchemaNode(String(), name="text", location="body")

А вот и вход JSON

{"text":"Hello!", "resourceID":12}

Он преобразуется в:

{u'text': u'Hello!', u'resourceID': 12}

Вот мой вопрос, могу ли я преобразовать тот же входной JSON в следующий?

{u'full_text': u'Hello!', u'resource_id': 12}

Спасибо за вашу помощь.

1 ответ

Решение

В конце концов мне пришлось сделать это вручную. Все, что получено из JSON, используется для создания объекта данных. Объект будет иметь пользовательскую функцию для сопоставления данных с желаемым форматом вывода, и вы передадите вывод в сериализатор:

data_schema = DataSchema().deserialize(self.request.json)
data_obj = DataObject(data_schema**) // or DataObject(full_text = data_schema['text'], resource_id = data_schema['resourceID'])
#
# ...
#
rbody = DataSchema().serialize(data_obj.map_dump())
return Response(body=rbody, status_code=201)

И Data Object будет выглядеть так:

class ProfileObj(Object):

    def __init__(self, text, resourceID):  // or __init__(self, full_text, resource_id)
        self.text = text
        self.resourceID = resourceID

    def map_dump(self):
        output['full_text'] = self.text
        output['resource_id'] = self.resource
        return output
Другие вопросы по тегам