代码之家  ›  专栏  ›  技术社区  ›  hleinone

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

  •  22
  • hleinone  · 技术社区  · 15 年前

    我有一个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 领域 Foo Java对象?

    我试着用 @JsonProperty("foo.bar") ,但不是这样的。

    4 回复  |  直到 15 年前
        1
  •  45
  •   hleinone    15 年前

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

    @JsonProperty("foo")
    public void setFoo(Map<String, Object> foo) {
      bar = (Integer) foo.get("bar");
    }
    
        2
  •  2
  •   StaxMan    15 年前

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

        3
  •  -3
  •   Wilson Soethe Cursino    12 年前

    下面是一个有效的快速示例:

    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");
        }
    }
    
        4
  •  -17
  •   Dennis    13 年前

    就像把苹果绑在橘子上一样!另一个“流行语”是“阻抗失配”,或者在《星际迷航1》中是“非隔离器!”将它绑定到一个匹配的对象,然后在不同类型的对象之间用Java进行新的赋值。