Tengo un objeto JSON, decir:

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

y quiero que se unen en un objeto de Java, como:

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

¿Cómo puedo ajustar el valor de foo.bar de JSON a la bar campo en el Foo objeto de Java?

He tratado de realizar anotaciones en el campo con @JsonProperty("foo.bar"), pero no funciona así.

InformationsquelleAutor hleinone | 2010-11-16

4 Comentarios

  1. 45

    Esto no es perfecto pero es el más elegante de la manera en que yo podía entender.

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

    No hay ninguna funcionalidad automatizada para esto (que yo sepa), pero esto es algo a menudo característica solicitada; no es esta Jira RFE: http://jira.codehaus.org/browse/JACKSON-132 que suena como lo que usted está buscando.

    • Sí que es el mismo problema, aunque yo lo uso para la deserialización. Supongo que mi solución anterior es lo mejor que puedo conseguir si no quiero cambiar la estructura de la Foo objeto.
    • Sí que me lo creo.
  3. -3

    Aquí un ejemplo rápido que funciona:

    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");
        }
    }
    • Esto no es diferente al aceptado respuesta.
    • ¿Por qué la necesidad de incluir un montón de lombok cosas en su respuesta? Realmente tendría el mismo resultado sin ellos.
  4. -17

    Que como la unión de una manzana a una naranja! Otra frase pegadiza’ sería, «Desajuste de Impedancia», o en Star Trek 1, «No Sequetor!» Enlazar un IGUALADO objeto, a continuación, hacer un trabajo nuevo en Java entre los diferentes tipos de objetos.

    • No es realmente útil. No me gustaría crear inútil clases de Java sólo porque alguien no podía diseño de un decente API JSON.
    • De acuerdo con @hleinone. Uno no siempre está en control de la API y la necesidad de crear clases anidadas/maps/hacks/vudú no es la solución correcta.

Dejar respuesta

Please enter your comment!
Please enter your name here