【问题标题】:directly convert CSV file to JSON file using the Jackson library使用 Jackson 库直接将 CSV 文件转换为 JSON 文件
【发布时间】:2013-11-14 23:39:24
【问题描述】:

我正在使用以下代码:

CsvSchema bootstrap = CsvSchema.emptySchema().withHeader();
ObjectMapper mapper = new CsvMapper();
File csvFile = new File("input.csv"); // or from String, URL etc
Object user = mapper.reader(?).withSchema(bootstrap).readValue(new File("data.csv"));
mapper.writeValue(new File("data.json"), user);

它在我的 IDE 中抛出一个错误,提示 cannot find symbol method withSchema(CsvSchema),但为什么呢?我已经使用了一些示例中的代码。

我不知道在mapper.reader() 中写入什么,因为我想转换任何 CSV 文件。
如何将任何 CSV 文件转换为 JSON 并将其保存到磁盘?

接下来要做什么?例子

【问题讨论】:

    标签: java json csv jackson


    【解决方案1】:

    我认为,您应该使用MappingIterator 来解决您的问题。见下例:

    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 JacksonProgram {
    
        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);
        }
    }
    

    有关更多信息和示例,请参阅此页面:jackson-dataformat-csv

    【讨论】:

    • 但是这个 User.class 是从哪里来的呢?我正在使用每个 CSV 文件第一行中的方案,所以 User.class 不存在并且也不需要?
    • 然后转换成 JSON?这只是读取/解析 CSV 的部分
    • 我以为你有用户类或类似的东西。让我考虑一下。
    • 是的,您可以使用mapper.configure(SerializationFeature.INDENT_OUTPUT, true);mapper.writerWithDefaultPrettyPrinter().writeValue(file, data); 进行此操作
    • 嗨,我们可以使用相同的库将过程从 jsonObject 转换为 csv 吗?
    猜你喜欢
    • 2019-03-25
    • 1970-01-01
    • 1970-01-01
    • 2021-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多