【问题标题】: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 implementationJibX 作为可能更好的选择,这样您就可以更好地控制要处理的XML。这可能是实现良好互操作性所必需的。

        【讨论】:

          【解决方案4】:

          真的需要使用 XML 吗?

          对于在 Java 和 Python 之间序列化结构化数据,您可能需要考虑 Google Protocol Buffers

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2019-08-03
            • 2011-03-16
            • 2013-06-08
            相关资源
            最近更新 更多