Экспорт / Импорт файла JSON через Jackson-2.9.7 - PullRequest
0 голосов
/ 31 октября 2018

Heyyo,

В настоящее время я работаю над проектом, где пользователь должен иметь возможность импортировать / экспортировать данные программы в файл JSON (типа TreeMap<String, List<Observation>>, где Observation - класс, содержащий LocalDate date и int value)

Для достижения экспортной части я использовал некоторые файлы JAR Jackson 2.9.7, чтобы получить доступ к ObjectMapper и, таким образом, экспортировать данные в файл JSON. Работает!

ObjectMapper mapper = new ObjectMapper();
mapper.writeValue(file, handler.get(LocalDate.MIN, LocalDate.MAX));

Однако для достижения части импорта я снова использовал JAR-файлы Jackson 2.9.7, чтобы получить доступ к Object mapper, который снова, Работает!

byte[] rawJson = new byte[dStream.available()];
ObjectMapper mapper = new ObjectMapper();
dStream.readFully(rawJson);                            
map = mapper.readValue(rawJson, TreeMap.class);

Однако, когда я пытаюсь добавить элементы, которые я сейчас импортировал, на временную карту, структура больше не соответствует ожидаемой. Вместо этого он, кажется, преобразовал его в LinkedHashMap с несколькими записями, и поэтому я не могу просто использовать класс Observation. Я предполагаю, что это потому, что я использую TreeMap.class при чтении, хотя после некоторых попыток я не могу сказать, что знаю, как действовать.

The values of the imported data

1 Ответ

0 голосов
/ 31 октября 2018

Используйте TypeReference:

запись:

TypeReference<Map<String, List<Observation>>> typeRef = 
new TypeReference<Map<String, List<Observation>>>() {};
ObjectMapper mapper = new ObjectMapper();
mapper.writerFor(typeRef).writeValue(file, handler.get(LocalDate.MIN, LocalDate.MAX));

читать:

byte[] rawJson = new byte[dStream.available()];
TypeReference<Map<String, List<Observation>>> typeRef = 
new TypeReference<Map<String, List<Observation>>>() {};
ObjectMapper mapper = new ObjectMapper();
dStream.readFully(rawJson);                            
map = mapper.readValue(rawJson, typeRef);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...