Разбор строки json в java со сложной структурой данных (Джексон)
Я пытаюсь преобразовать приведенную ниже строку JSON в объект Java, но я получаю пустой объект. В объекте prop2 может быть любое количество пар ключ-значение (где ключ - это строка, а значение - это массив).
{
"Level1": {
"prop1": "",
"prop2": {
"one": [{
"ip": "1.2.3.4",
"port": "100"
}],
"ten": [{
"ip": "10.20.20.10",
"port": "200"
}]
}
}
}
У меня есть структура этого класса, однако я получаю карту ipAndPorts как пустую.
@JsonIgnoreProperties(ignoreUnknown = true)
static class Root {
@JsonProperty("Level1")
private Level1 level1;
}
@JsonIgnoreProperties(ignoreUnknown = true)
static class Level1 {
@JsonProperty("prop2")
private Prop2 prop2;
}
@JsonIgnoreProperties(ignoreUnknown = true)
static class Prop2 {
private Map<String, List<IpAndPort>> ipAndPorts = Collections.emptyMap();
}
@JsonIgnoreProperties(ignoreUnknown = true)
static class IpAndPort {
@JsonProperty("port")
private String port;
}
Как должен выглядеть мой Java-класс, чтобы правильно представлять "prop2"?
2 ответа
Для справки: проблема была решена с помощью
@JsonIgnoreProperties(ignoreUnknown = true)
static class Level1 {
@JsonProperty("prop2")
private Map<String, List<IpAndPort>> ipAndPorts = Collections.emptyMap();
}
прямо без Prop2
учебный класс. В противном случае Джексон будет ожидать JSON-свойство ipAndPorts
под prop2
Объект JSON.
Я бы предпочел, чтобы вы сначала создали свой класс Java так, как вы хотите, чтобы он выглядел, а затем использовали Джексона для сериализации его в JSON. вы увидите, какова структура результирующего JSON, и узнаете, нужно ли вам модифицировать свой класс и каким образом.