2011-01-18 72 views
1

我一直在尋找一個xml序列化庫,可以將(Java/Python)對象序列化並反序列化爲xml和後面的對象。我現在正在使用Java的XStream。如果XStream有一個python版本可以從Xstream生成的xml反序列化,而這些xml會爲我完成。除非數據格式爲xml,否則Thrift或其他類型的庫不會起作用。我正在尋找任何可以做到的圖書館的建議。 - 謝謝Java和Python之間的XML序列化庫互操作性

回答

1

由於Java和Python對象本身如此不同,所以幾乎不可能做到這一點,除非雙方都限制允許的類型和類似的東西。

在這種情況下,我建議您使用JSON,這是一種很好的互操作性格式,即使它不是XML。

否則,您可以輕鬆編寫一個採用XStream XML並將其加載到Python對象的庫,但它總是受到Java和Python之間相似的限制。

0

我不認爲你很可能會找到一種自動化的方法來將Java對象和反序列化到Python對象中。它們是不同的東西,所以如果你想翻譯,你必須在一端或兩端編寫一些代碼。

如果它真的很簡單 - 字符串,數字,布爾值等,那麼您可能需要查看json,這是一種非常簡單的格式,可以綁定每種語言。 Deserialising在Python JSON對象是簡單的:

json.loads('{"test":false}') 

另一種方式來解決這個問題可能是使用的Jython,Python中的在Java中實現,所以你可以使用Java對象直接。

0

問題是(像其他答案一樣)XStream是Java對象序列化框架,而不是通用數據映射/綁定框架。這是有意設計的(請參閱XStream FAQ):好處在於它可以很好地序列化和反序列化所有類型的Java對象。缺點是結果XML結構相當嚴格,雖然您可以重命名,但其他可配置性不多。

但是,XStream不是唯一的Java XML處理庫。我建議檢出JAXB reference implementationJibX作爲可能更好的選擇,以便您可以更好地控制XML進行處理。這對於實現良好的互操作性可能是必要的。

0

它真的需要使用XML嗎?

對於序列化Java和Python之間的結構化數據,您可能需要考慮Google Protocol Buffers