【发布时间】:2020-01-12 20:50:46
【问题描述】:
我是 Python Marshmallow 模块的新手,非常喜欢它的序列化和反序列化。我知道在定义了一个 schema 之后,我可以很容易地使用schema.dumps 方法将一个 dict 或一个对象序列化为 JSON 格式。
但是,我想知道如何将对象或字典序列化为 JSON 以外的另一种格式。例如,有时我想将一个对象序列化为 XML。
我在 Marshmallow 的 Github 存储库中看到了 this issue。玩一个叫做json_module的东西似乎是可行的。但是,我无法真正关注该线程,因为我对 Marshmallow 还很陌生。
从逻辑上讲,schema.dumps 似乎是正确的方法,但从documentation 来看,我没有看到将数据序列化为 JSON 以外的任何其他格式的可能性。
如果有人能给我一个将 dict 转换为 XML 字符串的示例,我将不胜感激。
编辑:感谢使用dicttoxml 的回答。这是一个很好的模块,确实解决了我的问题。但是,“输出格式控制”不是marshmallow 的内置功能吗?我虽然如果是的话,那么对控制输出格式的支持应该是schema.dumps方法?还是我错过了什么?
【问题讨论】:
-
Marshmallow 本质上是格式不可知的。它输出 Python 字典和列表的结构,然后可以将其序列化为 JSON 或您选择的任何其他格式。
-
所以不,Marshmallow 不给你输出格式控制,除了你可以控制对象属性如何映射到输出字典中的键值对。目标是使用您选择的任何序列化方法生成序列化简单的输出。通常是 JSON,但也可以是 YAML、XML、CSV 或其他格式。
-
谢谢马丁。我想当我第一次在棉花糖的文档中看到格式不可知论的真正含义时,我不明白它的真正含义。那么棉花糖真正擅长的是什么?对我来说,剩下的基本上只是验证和可能的转换。例如,你如何比较棉花糖和地狱犬?
-
是的,它确实擅长验证和转换。它将来自潜在复杂对象(自定义类等)的数据放入列表和字典的结构中,并且可以反过来做同样的事情。
-
我不知道 Cerberus,但乍一看它只管理验证。这个空间的包比较多,比如collander。
标签: python json xml marshmallow