【发布时间】:2019-05-20 21:23:05
【问题描述】:
我设置了 CsvSchema 和 CsvMapper 以读取第一行中列名的 CSV 文件。
我需要能够对数据进行一些工作,更改特定字段,然后在保留列顺序的同时将数据写回。
我假设 CsvMapper 具有从第一行创建的内部模式,因为该地图具有所有正确的 key-value 对。
那么,有什么方法可以使用CsvMapper 的writer 函数来使用该模式来排序输出数据?
CsvSchema schema = CsvSchema.emptySchema().withHeader();
CsvMapper mapper = new CsvMapper();
MappingIterator<Map<String, String>> it = this.mapper.readerFor(Map.class)
.with(this.schema)
.readValues(stream);
现在,我在第一列数据上收到了一个 CsvMappingException 表示“无法识别的列”,所以看起来它没有使用架构。
【问题讨论】:
-
您使用哪个版本的Jackson?你的例子应该有效。您能否展示上述代码失败的示例
CSV有效负载? -
版本 2.9.8。不幸的是,我无法发布有效载荷,有 100 多列,我认为看到它们不会有太大帮助。它们都是纯文本,数据中没有逗号。没有什么不寻常的。 此 代码有效。它获取输入数据,映射它就好了。失败的是作家。就像在黑暗中刺伤一样,我尝试了
this.mapper.writer().writeValueAsString(rows);并在第一列得到了异常。
标签: java csv jackson fasterxml