Привязка свойства дочернего объекта JSON к полю объекта Java в Джексоне - PullRequest
22 голосов
/ 17 ноября 2010

У меня есть объект JSON, скажем:

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

и я хочу связать его в объект Java, например:

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

Как установить значение foo.bar из JSON в поле bar в Foo объекте Java?

Я пытался пометить поле с помощью @JsonProperty("foo.bar"), но это не сработало.

Ответы [ 4 ]

45 голосов
/ 17 ноября 2010

Это не идеально, но это самый элегантный способ, который я мог понять.

@JsonProperty("foo")
public void setFoo(Map<String, Object> foo) {
  bar = (Integer) foo.get("bar");
}
2 голосов
/ 17 ноября 2010

Для этого нет автоматической функции (насколько я знаю), но это довольно часто запрашиваемая функция; есть этот Jira RFE: http://jira.codehaus.org/browse/JACKSON-132, который звучит как то, что вы ищете.

0 голосов
/ 16 мая 2014

Вот краткий пример, который работает:

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");
    }
}
0 голосов
/ 13 ноября 2012

Это как привязать яблоко к апельсину!Другой «броской фразой» будет «Несоответствие импеданса» или в «Звездном пути 1» «Не секетор»Свяжите его с объектом MATCHED, затем выполните новое назначение в Java между различными типами объектов.

...