usar objeto ejemplo convertir convert con java json data-binding jackson

objeto - objectmapper java



Enlazar propiedad de objeto JSON hijo en el campo objeto Java en Jackson (4)

¡Es como atar una manzana a una naranja! Otra "frase pegadiza" sería "Impedance Mismatch", o en Star Trek 1, "Non Sequetor!" Enlazarlo con un objeto COINCIDIDO, luego hacer una nueva asignación en Java entre los diferentes tipos de objetos.

Tengo un objeto JSON, por ejemplo:

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

y quiero vincularlo en un objeto Java, como:

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

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

Intenté anotar el campo con @JsonProperty("foo.bar") , pero no funciona así.


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 perfecto, pero es la manera más elegante que pude descubrir.

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


No hay una funcionalidad automatizada para esto (hasta donde yo sé), pero esta es una característica que a menudo se solicita; existe esta Jira RFE: http://jira.codehaus.org/browse/JACKSON-132 que suena como lo que estás buscando.