2011-01-29 5 views
2

私は、次のようなJSONを持っている:基本的に変数に基づいてJackson JSONで異なるBeanクラスを使用しますか?

[{ 
    'kind':'1', 
    'value1': 'foo', 
    'value2': 'bar', 
    ... 
}, 
{ 
    'kind':'2', 
    'value1': 'foo', 
    'value2': 'bar', 
    ... 
} 
..] 

同じ変数を持つオブジェクトのリストを。私のコードでは、これらのオブジェクトを含むクラスAのArrayListを作成したいと考えています。しかし、私はそれぞれのオブジェクトが '種類'の値に応じて1つまたは2つのサブクラスになることを望みます。

どうすればこの問題を解決できますか?

ありがとうございます!

答えて

1

これは、Jacksonが「多態型処理」と呼ぶものです。これを行う方法の良い説明がありますhere。 JSONにシリアライズするときにクラス名をJSONに入れるようにJacksonに指示し、それを逆シリアル化するときにそのクラス名を使用する必要があります。これは、アノテーションを介して行われます:

@JsonTypeInfo(use=JsonTypeInfo.Id.NAME, 
       include=JsonTypeInfo.As.PROPERTY, property="kind") 

[出典:。(下記)@StaxMan]

あなたはJSON形式を制御していない場合、あなたはいくつかの共通の中間にそれをデシリアライズするためにジャクソンを使用することができますそのオブジェクトから目的のサブクラスオブジェクトを作成するコードを記述します。あるいは、json.orgライブラリを使用してJSON文字列をorg.json.JSONObjectに逆シリアル化し、JSONObjectのプロパティに基づいて目的のオブジェクトを構築するコードを記述します。

+0

これは正しいメカニズムです。この場合、使用するプロパティ名は "kind"なので、@JsonTypeInfor(use = JsonTypeInfo.Id.NAME、include = JsonTypeInfo.As.PROPERTY、property = "kind")のようなものになります。また、クラス名の代わりに、論理名( "1"、 "2")が使用されるように見えるので、 'JsonTypeInfo.Id.NAME'です。 – StaxMan

+0

@StaxMan:ありがとう! –

関連する問題