嘿,
我目前正在研究一个项目,该项目中用户应该能够将程序数据导入/导出到JSON文件(类型为TreeMap<String, List<Observation>>
,其中观察值为包含LocalDate date
和{ {1}})
要实现导出部分,我使用了Jackson 2.9.7 JAR文件中的某些文件来访问 ObjectMapper ,从而将数据导出到JSON文件中。 工作!
int value
但是,要实现导入部分,我再次使用了Jackson 2.9.7 JAR文件来访问对象映射器,该对象映射器再次 Works!
ObjectMapper mapper = new ObjectMapper();
mapper.writeValue(file, handler.get(LocalDate.MIN, LocalDate.MAX));
但是,当我尝试将现在已导入的项目添加到临时地图中时,结构不再是我期望的。相反,它似乎已将其转换为具有多个条目的LinkedHashMap,因此我不能简单地使用byte[] rawJson = new byte[dStream.available()];
ObjectMapper mapper = new ObjectMapper();
dStream.readFully(rawJson);
map = mapper.readValue(rawJson, TreeMap.class);
类。我猜是因为我在阅读Observation
时使用了它,尽管经过一些尝试,我不能说我知道该怎么做。
答案 0 :(得分:1)
使用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);