2011-09-26 8 views
8

私は、プロトコルの一部としてピクルされたメッセージを使用するPythonサービスを使用しています。私はこのサービスをJavaから照会したいと思いますが、そうするために、私はクライアント(Java)上で私のメッセージをピクルする必要があります。 pickleの実装がJVM上で実行されていますか(最小限の依存関係が理想的です)Javaオブジェクトをピクルス(Python)で直列化解除できるようにシリアル化するにはどうすればよいですか?

説明:サーバー側の変更はオプションではないため、代わりのシリアル化は便利ですが、ここでは問題は解決しません。

+2

おっと、これは醜いです。私はそうは思わない、JSONまたは何かを生産するサービスを得るチャンスがあるのだろうか?提供されるデータによっては、 'json.dumps'の' pickle.dumps'を交換するのと同じくらい簡単かもしれません。そのサービスの背後にいる人たちは、可能なら変更を確実に行うべきです、pickleは、プロトタイプやPython内にとどまることが保証されているデータ以外は、本当に悪い選択です(例えば、純粋なPythonアプリケーション以外のもの)。 – delnan

+0

Javaの 'Map'をpickled Pythonの' Hash'にシリアライズするだけで簡単です。私はクライアント側では、unpickleする必要はありません。依存としてジャイモンを引っ張ることは、呑み込む大きな薬です。 –

+0

@SethFitzsimmons:PickleはPython固有のプロトコルで、通常は内部的なものとみなされます。プロトコル自体は文書化されておらず、標準的なpickle実装を使用しています。したがって、あなたがjavaでプロトコルを再実装しない限り、PythonまたはJythonに依存する必要があります。 –

答えて

7

いくつかの追加調査をデシリアライズするためにPythonのJSONの漬物を使用するGSONまたはジャクソンのようなJavaのJSONシリアライザを使用することができますが、Javaと.NETプログラムすることができますMITライセンスのライブラリをpyroliteをもたらしましたPythonの世界とのインターフェイス。リモートオブジェクトの機能に加えて、さらに重要なのは、pickleシリアライザとデシリアライザです。

+2

元のリンクが壊れています。現在のリンクは 'https:// github.com/irmen/Pyrolite /'です。 –

1

あなたは非常に簡単にserilaiseと

+0

もちろん、この場合はサーバーを変更するという贅沢はありません。 –