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

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

于 2010-11-17T00:09:02.307 回答
-4

这是一个有效的快速示例:

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");
    }
}
于 2014-05-16T16:21:48.070 回答
-18

这就像把苹果绑在橘子上!另一个“吸引人的短语”是“阻抗不匹配”,或者在《星际迷航 1》中,“非 Sequetor!” 将它绑定一个 MATCHED 对象,然后在 Java 中在不同类型的对象之间进行新的赋值。

于 2012-11-13T01:35:49.057 回答