java - jackson objectmapper parse
JSON-Kindobjekteigenschaft in Java-Objektfeld in Jackson binden (3)
Ich habe ein JSON-Objekt, sagen wir:
{
"foo": {
"bar": 1
},
"baz": 2
}
und ich möchte es in ein Java-Objekt binden, wie:
@JsonIgnoreProperties(ignoreUnknown = true)
public class Foo {
private int bar;
@JsonProperty("baz")
private int baz;
}
Wie kann ich den Wert von foo.bar
von JSON auf das foo.bar
im Foo
Java-Objekt foo.bar
?
Ich habe versucht, das Feld mit @JsonProperty("foo.bar")
, aber es funktioniert nicht so.
https://ffff65535.com
Das ist nicht perfekt, aber es ist der eleganteste Weg, den ich herausfinden könnte.
@JsonProperty("foo")
public void setFoo(Map<String, Object> foo) {
bar = (Integer) foo.get("bar");
}
Das ist, als würde man einen Apfel an eine Orange binden! Eine andere "einprägsame Phrase" wäre "Impedance Mismatch" oder in Star Trek 1: "Non Sequector!" Binden Sie ein MATCHED-Objekt und führen Sie dann in Java eine neue Zuweisung zwischen den verschiedenen Arten von Objekten durch.
Hier ein kurzes Beispiel, das funktioniert:
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");
}
}