我正在使用Colander在基于Pyramid / Cornice的项目中将JSON字符串转换为Python对象,反之亦然。
有什么方法可以序列化/反序列化为不同的名称/键吗?
这是漏勺模式:
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}
感谢您的帮助。
答案 0 :(得分:1)
我最终不得不手动完成。 从JSON接收的任何内容都用于构造数据对象。 Object将有一个自定义函数将数据映射到所需的输出格式,并将输出传递给序列化器:
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)
DataObject看起来像这样:
class DataObject(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