【问题标题】:Java , Csv to json , jackson-dataformat-csvJava , Csv 到 json , jackson-dataformat-csv
【发布时间】:2017-04-26 12:01:21
【问题描述】:

我是java新手,我想将csv文件转换成json

我正在使用以下代码示例将 csv 文件转换为 json 文件, 问题是,我在“withSchema(bootstrap)”上有一个错误,它说:“带有(CsvSchema)的方法对于 ObjectReader 类型是未定义的” 而且我不知道如何修复它,我已将 maven 依赖项更改为 2.9.0 版本,尝试 withtype(bootstrap) withCsvSchema(bootstap) 但仍然无法正常工作。

谢谢

代码如下:

package CsvData;

import java.io.File;
import java.io.IOException;
import java.util.List;
import java.util.Map;

import com.fasterxml.jackson.databind.MappingIterator;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.dataformat.csv.CsvMapper;
import com.fasterxml.jackson.dataformat.csv.CsvSchema;

public class csvjson {

    public static void main(String[] args) throws Exception {
        File input = new File("/x/data.csv");
        File output = new File("/x/data.json");

        List<Map<?, ?>> data = readObjectsFromCsv(input);
        writeAsJson(data, output);
    }

    public static List<Map<?, ?>> readObjectsFromCsv(File file) throws IOException {
        CsvSchema bootstrap = CsvSchema.emptySchema().withHeader();
        CsvMapper csvMapper = new CsvMapper();
        MappingIterator<Map<?, ?>> mappingIterator = csvMapper.reader(Map.class).with(bootstrap).readValues(file);

        return mappingIterator.readAll();
    }

    public static void writeAsJson(List<Map<?, ?>> data, File file) throws IOException {
        ObjectMapper mapper = new ObjectMapper();
        mapper.writeValue(file, data);
    }
}

【问题讨论】:

  • 请添加错误信息
  • 返回的List&lt;Map&gt;的内容是什么?
  • 您是否尝试找到该 ObjectReader 类的 JavaDoc?
  • @AlexT。它包含我的 csv 数据
  • @Jens 错误是:线程“main”java.lang.Error 中的异常:未解决的编译问题:ObjectReader 类型的方法 with(CsvSchema) 未定义

标签: java json csv jackson


【解决方案1】:

我尝试使用 2.2.1 版本,它对我来说很好用。

<dependency>
    <groupId>com.fasterxml.jackson.dataformat</groupId>
    <artifactId>jackson-dataformat-csv</artifactId>
<version>2.2.1</version>

这是Java方法

public static List<Map<?, ?>> readObjectsFromCsv(File file) throws IOException {
    CsvSchema bootstrap = CsvSchema.emptySchema().withHeader();
    CsvMapper csvMapper = new CsvMapper();
    MappingIterator<Map<?, ?>> mappingIterator = csvMapper.reader(Map.class).with(bootstrap).readValues(file);

    return  mappingIterator.readAll();
}

甚至文档说它从 2.2 开始就可以使用,但不知道为什么它不适用于 2.9.0。

【讨论】:

    【解决方案2】:

    正确的方法名称是 withSchema

    csvMapper.reader(Map.class).withSchema(bootstrap).readValues(file);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-13
      • 2017-10-24
      • 1970-01-01
      • 2017-10-01
      • 2017-03-06
      • 2019-08-02
      相关资源
      最近更新 更多