22

私はJSONオブジェクトを持っています、例えば:

{
  "foo": {
    "bar": 1
  },
  "baz": 2
}

そして、私はそれを次のようなJavaオブジェクトにバインドしたいと思います。

@JsonIgnoreProperties(ignoreUnknown = true)
public class Foo {
  private int bar;
  @JsonProperty("baz")
  private int baz;
}

foo.barJSONからJavaオブジェクトのbarフィールドにの値を設定するにはどうすればよいですか?Foo

フィールドに。で注釈を付けようとしました@JsonProperty("foo.bar")が、そのようには機能しません。

4

4 に答える 4

45

これは完璧ではありませんが、私が理解できる最もエレガントな方法です。

@JsonProperty("foo")
public void setFoo(Map<String, Object> foo) {
  bar = (Integer) foo.get("bar");
}
于 2010-11-16T23:36:42.107 に答える
2

これには自動化された機能はありませんが(私が知る限り)、これはやや頻繁に要求される機能です。このJiraRFEがあります:http://jira.codehaus.org/browse/JACKSON-132あなたが探しているもののように聞こえます。

于 2010-11-17T00:09:02.307 に答える
-4

動作する簡単な例を次に示します。

JSON:

[{"function":{"name":"Function 1"}},
 {"function":{"name":"Function 2"}}]

Java:

import java.util.Map;

import javax.xml.bind.annotation.XmlRootElement;

import lombok.Getter;
import lombok.Setter;
import lombok.ToString;

import org.codehaus.jackson.annotate.JsonIgnoreProperties;
import org.codehaus.jackson.annotate.JsonProperty;
@Getter
@Setter
@ToString
@JsonIgnoreProperties(ignoreUnknown = true)
public class Function {
    @JsonProperty("name")
    private String name;

    @JsonProperty("function")
    public void setFunction(Map<String, Object> function) {
      name = (String) function.get("name");
    }
}
于 2014-05-16T16:21:48.070 に答える
-18

それはリンゴをオレンジに縛るようなものです!もう1つの「キャッチーなフレーズ」は、「インピーダンスミスマッチ」、またはスタートレック1の「ノンセケトール」です。MATCHEDオブジェクトをバインドしてから、Javaでさまざまな種類のオブジェクト間で新しい割り当てを行います。

于 2012-11-13T01:35:49.057 に答える