コンテキストの場合、ほとんどのデータはJSON文字列として格納されています。これはバックエンドのHadoopでうまく動作し、フロントエンドのRubyで扱いやすくなります。私のデータ型は、継承のための自然なパターンに適合しています。JavaとRubyを使用したJSONの多態性または継承
簡単にするために、私はクラスPetと、ペットに給餌するプロセスFeedPetを持っているとしましょう。私はまたペットの一種である犬にのみ適用されるプロセスWalkDogを持っています。私のデータは、私が犬ではないペットを歩くことを心配する必要がないように編成されています。
私がしたいのは、ペットと犬がペットを拡張し、犬が追加のメソッド "getLeash()"を持っていることですが、これをJSONにどのようにマッピングするかを理解できません。
代わりに、私は種データハッシュマップを持つクラスを持っているので、WalkDogプロセスはdog.getLeash()の代わりにpet.getSpeciesData( "leash")を呼び出します。
Dogを拡張することができます。私は、Jacksonライブラリを使用してJSONにそれをシリアル化できます。 JSONオブジェクトにはリースフィールドがあります。しかし、私はすべてのペットに餌を与えたいと仮定します。すべてのペットはgetFood()メソッドを持っています。そのため、FeedPetプロセスはオブジェクトをペットに逆シリアル化します。しかし、これはリーシュフィールドを失う。
WalkDogプロセスは、すべての入力がDogsになることを知っているので、これを行うことができます。そのため、Dogとして読み取ってDogとして書き戻すことができます。
JavaオブジェクトをJSONにシリアライズしてそのタイプを保持できる方法はありますか?私はRailsの単一のテーブル継承のようなものを考えていますが、JSONライブラリが理解できるものでなければなりません。
私はあなたがそのコアに答えたと思いますが、JSONでこれを表現する標準的な方法はありません。 JACKSON-91は私の望むものを私に与えてくれます。私の場合、私はRubyのデータだけを読んでいるからです。 –
ああ。実際には、Javaで読む必要がある場合にのみ91が必要になります。クラス情報を書くには簡単な方法があるかもしれませんが(91でもこれを明らかにカバーします) 1つの方法は、Object.getClass()を直列化可能にすることです(SerializationConfig.Feature.OUTPUT_CLASS_NAME?)。 – StaxMan