Ошибки, которые вы получаете, связаны с ошибкой imports
в вашем файле класса. Теперь, даже если это было нормально, то, что вы пытаетесь сделать, все равно не работает.
Во-первых, в вашем CSV
файле отсутствует заголовок (над страной), во-вторых, как с обычной JSON
сериализацией / десериализация, вам нужно выполнить это действие с объектом (простое pojo). В вашем случае вы пытаетесь сделать это, используя object
, что неверно - как синтаксически, так и концептуально.
С указанным выше попробуйте следующее. Измените свой 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; }
}
}
Как видите, я использую простой pojo MortalityEntry
для десериализовать (из CSV) и сериализовать (в JSON), позволяя Джексону творить чудеса c.
Этого простого примера должно быть достаточно, чтобы вы начали.