将JSON子对象属性绑定到Jackson中的Java对象字段

时间:2010-11-16 22:40:09

标签: java json data-binding jackson

我有一个JSON对象,比如说:

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

我希望将它绑定到Java对象,例如:

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

如何将foo.bar的值从JSON设置为bar Java对象中的Foo字段?

我尝试使用@JsonProperty("foo.bar")对字段进行注释,但它不能像那样工作。

4 个答案:

答案 0 :(得分:45)

这并不完美,但这是我能想到的最优雅的方式。

@JsonProperty("foo")
public void setFoo(Map<String, Object> foo) {
  bar = (Integer) foo.get("bar");
}

答案 1 :(得分:2)

这没有自动化功能(据我所知),但这是一个经常被请求的功能;有这个Jira RFE:http://jira.codehaus.org/browse/JACKSON-132听起来像你在寻找。

答案 2 :(得分:-3)

这是一个有效的简单示例:

<强> JSON:

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

<强>爪哇:

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");
    }
}

答案 3 :(得分:-16)

这就像把苹果绑在橙子上一样!另一个“吸引人的短语”是“Impedance Mismatch”,或者是Star Trek 1,“Non Sequetor!”将它绑定到MATCHED对象,然后在不同类型的对象之间用Java进行新的赋值。