【问题标题】:Marshmallow: How to serialize a dict or an object to XML? [duplicate]Marshmallow:如何将字典或对象序列化为 XML? [复制]
【发布时间】: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


【解决方案1】:

根据answer here。您总是可以使用库将 json 处理为 xml。试试dicttoxml

import json
from dicttoxml import dicttoxml
marshmallow_json_string = schema.dumps
marshmallow_dict = json.loads(marshmallow_json_string)
marshmallow_xml = dicttoxml(marshmallow_dict)

【讨论】:

  • 这是一个非常有希望的答案。非常感谢。尽管如此,我的直觉是它应该被内置到棉花糖中,不是吗?也许我对棉花糖的理解是错误的,但我认为它可以控制输入格式,进行转换并控制输出格式?
  • 可能我不太确定,不知道用户平时是怎么使用包的。无论哪种方式,我认为您在 github 问题中为 repo 谈论它是正确的。了解该项目目的的开发人员可以告诉您他们为什么包含/不包含它。
  • 看看at this issue 哪里有人在输入 json 并输出 yaml。我认为这就是您可能想要的,但对于 xml。
  • 谢谢杰西。我认为您提供的链接确实对我有所帮助。我会将此作为答案。回想起来,我错过的其实是如何使用 render_module 方法:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-06
  • 2020-08-01
  • 1970-01-01
  • 2012-05-18
相关资源
最近更新 更多