0

这是我在 StackOverflow 上的第一篇文章!

我一直在尝试上传 CSV 文件,对其进行解析,然后从中创建一个 json 文件。

我使用 Jackson 解析器找到了本教程:https ://kalliphant.com/jackson-convert-csv-json-example/ (我之所以选择它是因为处理速度快),但是我在尝试时发现了错误,但我没有找到为什么我会得到这些,我实际上正在使用 intellij IDEA,我尝试使用 reload project 并从 maven 下载源代码,但它并没有解决问题。

我一直在互联网上寻找这个错误,但我没有找到任何相关的。

我从教程中输入了完全相同的代码,但我收到了这些错误:

我得到的错误:

我得到的错误

谢谢!

4

1 回答 1

0

您遇到的错误似乎与imports您的类文件错误有关。现在,即使那没问题,您尝试做的事情仍然无法正常工作。

首先,您的CSV文件缺少标题(在国家/地区之上),其次,与正常的JSON序列化/反序列化一样,您需要对对象执行此操作(简单的 pojo)。在您的情况下,您尝试使用objectwhich 是错误的 - 无论是在语法上还是在概念上。

手头有上述内容,请尝试以下内容。将您的文件修改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),让杰克逊发挥它的魔力。

这个简单的例子应该足以让你继续前进。

于 2020-08-04T14:22:18.510 回答