0

JSONファイルにマーシャリング/アンマーシャリングするためにJacksonで注釈を付けようとしているこのオブジェクト構造があります。

public class A {
    List<B> bList;
}

public class B {
    String attr;
    Map<String, C> map;
}

public class C {
    @JsonIgnore
    String name;
    String value;
}

A'のリストとB'のBマップがCあり、マップのキーはのname属性ですC。可能であれば、JSONを次のように表示します。

{
    "bList" : [
               {
                   "attr":"itsValue"
                   "KEY_IN_MAP":"VALUE_IN_C",
                   "KEY_2_IN_MAP":"VALUE_2_IN_C"
               }
               ]
}

はマップ内のキーとしてKEY_IN_MAPの名前であり、はマップ内の値オブジェクトの値です。マップのputメソッドに注釈を付けてみました。CBVALUE_IN_C

@JsonAnySetter
private void put(String name, C value) {
    map.put(name, c);
}

しかし、これをマーシャリングすると、次のようになります。

{
    "bList" : [
               {
                   "attr":"itsValue"
                   "KEY_IN_MAP": {
                       "value":"VALUE_IN_C",
                   },
                   "KEY_2_IN_MAP": {
                       "value":"VALUE_2_IN_C"
                   }
               }
               ]
}

Jacksonまたは他のJSONシリアル化ライブラリを使用して上記のマッピングを取得する方法はありますか?"value"私の目標は、毎回書き込みの冗長性を取り除き、ファイルを可能な限り圧縮することです。

のマップはBのリストに変換できますが、Cそれでもマッピングが必要です

{"name" : "value"} for each object C
4

1 に答える 1

1

ここに私が持っているいくつかの提案があります:

  1. になりましょMap<String,C>Map<String,String>
  2. あなたはあなたをすることもできMap<String,C>ますList<C>

同じことを議論している他のスレッドを見てください。

于 2013-01-14T15:23:14.903 に答える