#java #jackson
#java #джексон
Вопрос:
Допустим, у меня есть
{
"foo" : "bar",
"other-foo": "baz",
"list-foo" : [
"x": "y",
"w":"z"
]
}
Как я могу сделать это Map
? Я знаю, что могу использовать jackson…Но я действительно не могу назвать это Map<String, String>
или Map<String, Object>
или Map<String, List>
есть ли хороший чистый способ, или ответ заключается в создании объекта, который представляет это полностью?
Комментарии:
1. Что именно вы хотите с этим сделать? (И вы могли бы сделать это
Map<String, Map<String, String>>
— но это не лучшая идея).2. Просто хочу сделать это картой, чтобы потребитель сервиса мог извлекать необходимые значения. Возможно, лучшая идея — определить объект
Ответ №1:
Если вы не предоставляете ссылку на целевой класс или тип
-
Jackson автоматически десериализует объект json в
Map<String,Object>
, фактически реализованный с помощьюLinkedHashMap<String,Object>
, который сохраняет порядок свойств, найденных в JSON. -
На карте будет запись с ключом «list-foo» и значением, равным
Map<String,Object>
.
Или вы можете определить специализированные классы для десериализации Джексона.
Джексон десериализует в классы, которые вы определяете, если это возможно.
Если вы предоставите Джексону Class или TypeReference в качестве целевого объекта, он попытается создать экземпляр запрошенного класса.
В общем случае вы можете предоставить класс, который соответствует одному из этих критериев
-
Класс представляет собой компонент с общедоступными установщиками, которые следуют соглашениям об именовании компонентов.
-
Класс имеет открытые поля-члены, которые соответствуют именам свойств json.
-
Класс имеет общедоступные методы установки, аннотированные аннотациями Джексона.
-
Класс реализует интерфейс JsonSerializable и имеет метод serialize.
-
Или если вы создали пользовательский сериализатор и связали его с классом, используя аннотации Джексона.
Любые поля-члены класса также могут быть десериализованы на основе тех же критериев или если они являются примитивными типами, перечислениями или коллекциями Java, распознанными Jackson.