2

私は次のようなJSONを持っています:

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

基本的に、同じ変数を持つオブジェクトのリスト。私のコードでは、これらのオブジェクトを含むクラスAのArrayListを作成したいと思います。ただし、「kind」の値に応じて、各オブジェクトをサブクラス1または2にします。

どうすればこれを達成できますか?

ありがとう!

4

1 に答える 1

1

これは、ジャクソンが「ポリモーフィック型処理」と呼んでいるものです。ここにこれを行う方法の良い説明があります。シリアル化するときにクラス名をJSONに入れ、逆シリアル化するときにそのクラス名を使用するようにJacksonに指示する必要があります。これは注釈を介して行われます:

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

[出典:@StaxMan(下記)]

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

于 2011-01-29T19:42:48.930 に答える