Попытка преобразовать файл CSV в формат JSON, чтобы сохранить его в mongodb (весна) - PullRequest
0 голосов
/ 04 августа 2020

Это мой первый пост в StackOverflow!

Я пытался загрузить файл CSV, проанализировать его и создать из него файл json.

Я нашел этот учебник используя парсер Джексона: https://kalliphant.com/jackson-convert-csv-json-example/ (я выбрал это из-за скорости обработки), но я обнаружил ошибки, когда попробовал, и я не нашел, почему я их получаю, я на самом деле использую intellij IDEA , и я попытался использовать проект перезагрузки и загрузить исходники из maven, но это не решило проблему.

Я искал эту ошибку на inte rnet, но не нашел ничего подходящего.

Я ввел точно такой же код из учебника и получаю следующие ошибки:

Ошибки, которые я получил:

У меня есть ошибки

Спасибо!

1 Ответ

0 голосов
/ 04 августа 2020

Ошибки, которые вы получаете, связаны с ошибкой 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.

Этого простого примера должно быть достаточно, чтобы вы начали.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...