【问题标题】:XML serialization library interoperability between Java and PythonJava和Python之间的XML序列化库互操作性
【发布时间】:2011-01-18 23:06:19
【问题描述】:
我一直在寻找一个 xml 序列化库,它可以将(Java/Python)对象序列化和反序列化为 xml 并返回。我现在正在为 Java 使用 XStream。如果 XStream 有一个 python 版本可以从 Xstream 生成的 xml 反序列化,那会为我完成它。 Thrift 或其他此类库将无法工作,除非它们允许数据格式为 xml。我正在寻找任何可以做到这一点的图书馆的建议。 - 谢谢
【问题讨论】:
标签:
java
python
xml
serialization
【解决方案1】:
由于 Java 和 Python 对象本身如此不同,因此几乎不可能做到这一点,除非双方都限制允许的类型等。
在这种情况下,我建议您使用 JSON,这是一种很好的互操作性格式,即使它不是 XML。
否则你可以很容易地编写一个库来接受 XStream XML 并将它加载到 Python 对象中,但它总是被限制在 Java 和 Python 之间的任何相似之处。
【解决方案2】:
我认为您不太可能找到一种自动化的方法来序列化 Java 对象并反序列化为 Python 对象。它们是不同的东西,所以如果你想翻译,你必须在一端或两端编写一些代码。
如果它是非常简单的东西 - 字符串、数字、布尔值等等,那么您可能需要研究 json,这是一种非常简单的格式,几乎可以绑定所有语言。在 Python 中反序列化一个 json 对象很简单:
json.loads('{"test":false}')
解决该问题的另一种方法可能是使用 Jython,它是 Java 中 Python 的实现,因此您可以直接使用 Java 对象。
【解决方案3】:
问题是(就像其他答案所暗示的那样)XStream 是一个 Java 对象序列化框架,而不是一般的数据映射/绑定框架。这是设计使然(参见 XStream FAQ):好处是它可以很好地序列化和反序列化各种开箱即用的 Java 对象。缺点是生成的 XML 结构相当僵化,虽然您可以重命名,但没有太多其他可配置性。
但 XStream 并不是唯一的 Java XML 处理库。我建议检查JAXB reference implementation 或JibX 作为可能更好的选择,这样您就可以更好地控制要处理的XML。这可能是实现良好互操作性所必需的。