【发布时间】:2020-09-10 17:38:25
【问题描述】:
经过一些快速的谷歌搜索后,我找到了一种使用 Jackson 库读取 CSV 文件并将其解析为 JSON 的简单方法。一切都很好,除了......一些 CSV 标题列名称嵌入了换行符。该程序处理它,但我留下了嵌入换行符的 JSON 键。我想删除这些(或用空格替换它们)。
这是我找到的简单程序:
import java.io.File;
import java.util.List;
import java.util.Map;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.dataformat.csv.CsvMapper;
import com.fasterxml.jackson.dataformat.csv.CsvSchema;
public class CSVToJSON {
public static void main(String[] args) throws Exception {
File input = new File("PDM_BOM.csv");
File output = new File("output.json");
CsvSchema csvSchema = CsvSchema.builder().setUseHeader(true).build();
CsvMapper csvMapper = new CsvMapper();
// Read data from CSV file
List<Object> readAll = csvMapper.readerFor(Map.class).with(csvSchema).readValues(input)
.readAll();
ObjectMapper mapper = new ObjectMapper();
// Write JSON formated data to output.json file
mapper.writerWithDefaultPrettyPrinter().writeValue(output, readAll);
// Write JSON formated data to stdout
System.out.println(mapper.writerWithDefaultPrettyPrinter().writeValueAsString(readAll));
}
}
所以,举个例子:
PARENT\nITEM\nNUMBER
以下是生成的示例:
"PARENT\nITEM\nNUMBER" : "208E8840040",
我需要这样:
"PARENT ITEM NUMBER" : "208E8840040",
Jackson 映射器上是否有可以处理此问题的配置设置?或者,我是否需要为映射器提供某种自定义“处理程序”?
特殊情况
为了增加一些复杂性,在某些情况下,仅用空格替换换行符不会总是产生所需的内容。
示例 1:
有时会有这样的列标题:
QTY\nORDER/\nTRANSACTION
在这种情况下,我需要删除换行符并替换为空,这样结果是:
QTY ORDER/TRANSACTION
, 不是
QTY ORDER/ TRANSACTION
示例 2:
有时,出于某种原因,列标题在换行符之前有一个空格:
EFFECTIVE \nTHRU DATE
这需要输出为:
EFFECTIVE THRU DATE
, 不是
EFFECTIVE THRU DATE
任何关于如何处理至少主要问题的想法将不胜感激。
【问题讨论】: