Разбор строки 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, и узнаете, нужно ли вам модифицировать свой класс и каким образом.

Другие вопросы по тегам