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");
    }
}




jackson