Подтвердить что ты не робот

Проблема при попытке использовать Джексона в java

Я пытаюсь использовать Jackson для преобразования некоторых данных JSON в объекты Java, список объектов, которые будут точными, но я получаю эту ошибку:

org.codehaus.jackson.map.JsonMappingException: не удается десериализовать экземпляр entitylayer.Detail из маркера START_ARRAY

это код:

 ObjectMapper mapper = new ObjectMapper(); 
 List<Detail> lcd = (List<Detail>) mapper.readValue(ld, Detail.class);

ld - это список в формате Json, это часть, которая заставляет меня запутаться в джексон-учебнике. что означает новый файл ( "user.json" )? Я предположил, что это строка в формате json, которую я хотел преобразовать, поэтому я использовал ld.

Надеюсь, вы сможете мне помочь.

4b9b3361

Ответ 1

Из учебника, который вы связали (другие коллекции работают одинаково):

Итак, если вы хотите привязать данные к карте, вам нужно будет использовать:

Map<String,User> result = mapper.readValue(src, new TypeReference<Map<String,User>>() { });

где TypeReference требуется только для определения общего типа (через этот класс в любом случае): важная часть → , которая определяет тип для привязки.

Если вы этого не сделаете (и просто передаете Map.class), вызов эквивалентен привязке к Map (т.е. "нетипизированной" карте), как объяснялось выше.

Изменить:

Если вы настаиваете на том, чтобы ложка кормилась:

List<Detail> lcd = mapper.readValue(ld, new TypeReference<List<Detail>>() {});

Ответ 2

В качестве альтернативной стратегии обработка массивов несколько удобнее, потому что вы можете легко указать тип. Таким образом, вы также можете это сделать:

Detail[] details = mapper.readValue(ld, Detail[].class);

Массивы часто недоиспользуются, по крайней мере, при работе с Джексоном. До тех пор, пока вам не нужно слишком сильно изменять результаты, они очень удобны в использовании, так как типы хорошо содержатся без использования дженериков (и, как результат, безопасность типов является сильной, это не просто пучок компилятора).

Ответ 3

Альтернативно самостоятельно разбирайте JSON и создавайте все POJO, которые вы хотите создать. Я сделал это, чтобы преобразовать JSON в JAXB.

Обратитесь к разделу "Пример потокового API" в http://wiki.fasterxml.com/JacksonInFiveMinutes

Это проще, чем вы ожидали.

Ответ 4

Всякий раз, когда вы получаете эту ошибку, сначала проверьте, является ли строка JSON, которую вы пытаетесь преобразовать, правильной строкой JSON. Если вы попытаетесь создать свою собственную строку JSON для локального тестирования вашего кода, тогда вы получите эту ошибку.