Question

J'ai un objet JSON, par exemple:

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

et je veux lier dans un objet Java, comme:

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

Comment puis-je définir la valeur de foo.bar de JSON au champ bar dans l'objet Foo Java?

J'ai essayé annoter le terrain avec @JsonProperty("foo.bar"), mais il ne fonctionne pas comme ça.

Était-ce utile?

La solution

Ce n'est pas parfait, mais il est la façon la plus élégante que je pouvais trouver.

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

Autres conseils

Il n'y a pas de fonctionnalité automatisée pour cela (pour autant que je sache), mais cela est une caractéristique assez souvent demandée; il y a ce Jira RFE: http://jira.codehaus.org/browse/JACKSON-132 qui sonne comme ce que vous cherchez.

Voici un exemple rapide qui fonctionne:

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

C'est comme liant une pomme à une orange! Une autre 'phrase accrocheuse' serait, "impédance mismatch", ou dans Star Trek 1, "Non Sequetor!" Liez un objet CORRESPONDANTE, puis effectuez une nouvelle affectation en Java entre les différents types d'objets.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top