6

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

{ 
    fields : {
            "foo" : "foovalue",
            "bar" : "barvalue"
    }
}

私は次のようにpojoを書きました:

public class MyPojo {

    @JsonProperty("fields") 
    private List<Field> fields;

    static class Field {
        @JsonProperty("foo") private String foo;
        @JsonProperty("bar") private String bar;

        //Getters and setters for those 2
}

私のjsonフィールド「fields」はハッシュマップであり、リストではないため、これは明らかに失敗します。
私の質問は:Jacksonにマップキーをpojoプロパティ名として認識させ、マップ値をpojoプロパティ値に割り当てることができる「魔法の」注釈はありますか?

PS:フィールドオブジェクトを...として持ちたくありません。

private Map<String, String> fields;

...私の実際のjsonでは、文字列だけでなく、マップ値に複雑なオブジェクトがあるためです...

ありがとう ;-)

フィリップ

4

1 に答える 1

12

わかりました。そのJSONの場合、次のように例を少し変更します。

public class MyPojo {
  public Fields fields;
}

public class Fields {
  public String foo;
  public String bar;
}

オブジェクトの構造はJSONの構造と一致する必要があるためです。もちろん、パブリックフィールドの代わりにセッターとゲッターを使用することもできます(セッターやフィールドの代わりにコンストラクターを使用することもできます)。これは最も単純な例です。

元のクラスは、次のようにJSONを生成/消費します。

{ 
  "fields" : [
    {
      "foo" : "foovalue",
      "bar" : "barvalue"
    }
  ]
}

リストはJSON配列にマップされるためです。

于 2010-12-10T18:46:46.530 に答える