Джексон: понять, является ли исходный JSON массивом или объектом - PullRequest
0 голосов
/ 01 июня 2018

Для анализа JSON в библиотеке Джексона потребуется:

  • для объекта

    MapType hashMapType = typeFactory.constructMapType(HashMap.class, String.class, Object.class);
    Map<String, Object> receivedMessageObject =  objectMapper.readValue(messageBody, hashMapType);
    
  • для массива объектов

    Map[] receivedMessage = objectMapper.readValue(messageBody, HashMap[].class)
    

Как лучше всего проверить, есть ли у меня массив или объект в messageBody, чтобы направить на правильный синтаксический анализ?Это просто для проверки маркера массива в MessageBody?

Ответы [ 2 ]

0 голосов
/ 01 июня 2018

Опция - это просто обрабатывать все, что может быть массивом, как массив.Это часто наиболее удобно, если ваш исходный JSON был только что автоматически преобразован из XML или был создан с использованием первой XML-библиотеки, такой как Jettison.

Это достаточно распространенный вариант использования, для которого есть переключатель Джексона:

ObjectMapper mapper = new ObjectMapper();
mapper.configure(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY, true);

Затем можно просто десериализовать свойство в тип коллекции независимо от того, является ли он массивом или объектом в исходном JSON.

0 голосов
/ 01 июня 2018

Если вы хотите узнать, является ли ваш ввод массивом или объектом, вы можете просто использовать метод readTree.Простой пример:

ObjectMapper mapper = new ObjectMapper();

String json1 = "{\"key\": \"value\"}";
String json2 = "[\"key1\", \"key2\"]";

JsonNode tree1 = mapper.readTree(json1);
System.out.println(tree1.isArray());
System.out.println(tree1.isObject());

JsonNode tree2 = mapper.readTree(json2);
System.out.println(tree2.isArray());
System.out.println(tree2.isObject());

Если вы хотите иметь возможность десериализации нескольких типов, взгляните на Полиморфная десериализация

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...