您遇到的错误似乎与imports
您的类文件错误有关。现在,即使那没问题,您尝试做的事情仍然无法正常工作。
首先,您的CSV
文件缺少标题(在国家/地区之上),其次,与正常的JSON
序列化/反序列化一样,您需要对对象执行此操作(简单的 pojo)。在您的情况下,您尝试使用object
which 是错误的 - 无论是在语法上还是在概念上。
手头有上述内容,请尝试以下内容。将您的文件修改CSV
为如下所示:
country population mortality
spain 13000000 10000
france 30000000 15000
united kingdom 40000000 22000
belgium 20000000 50000
us 25000000 30000
试试下面的代码:
public class CsvParser {
public static void main(String... args) {
CsvSchema schema = CsvSchema
.emptySchema()
.withHeader();
ObjectReader reader = new CsvMapper()
.readerFor(MortalityEntry.class)
.with(schema);
List<MortalityEntry> results = null;
try {
MappingIterator<MortalityEntry> iterator = reader.readValues(Paths.get("/tmp/input.csv").toFile());
results = iterator.readAll();
} catch (IOException e) {
e.printStackTrace();
}
ObjectMapper objectMapper = new ObjectMapper();
try {
objectMapper.writeValue(Paths.get("/tmp/output.json").toFile(), results);
} catch (IOException e) {
e.printStackTrace();
}
}
private static class MortalityEntry {
private String country;
public String getCountry() { return country; }
public void setCountry(String country) { this.country = country; }
private Integer population;
public Integer getPopulation() { return population; }
public void setPopulation(Integer population) { this.population = population; }
private Integer mortality;
public Integer getMortality() { return mortality; }
public void setMortality(Integer mortality) { this.mortality = mortality; }
}
}
正如你所看到的,我正在使用一个简单的 pojoMortalityEntry
来反序列化(从 CSV)和序列化(到 JSON),让杰克逊发挥它的魔力。
这个简单的例子应该足以让你继续前进。