Jackson CsvMapper 只读取第一行

标签 jackson jackson-dataformat-csv

我想将 csv 文件读入字符串列表。我还希望它修剪空格并允许尾随逗号。我的 csv 文件如下所示:

abcdefghijklmno ,
pqrstuwzabcdefh,
ijklmnopqrstuwyz,
zabcdefghijklmopqr,

当我尝试使用我的方法解析它时:

fun parseCsv(inputStream: InputStream): List<String> {
        val mapper = CsvMapper().enable(CsvParser.Feature.TRIM_SPACES).enable(CsvParser.Feature.ALLOW_TRAILING_COMMA)
        val schema = CsvSchema
            .emptySchema()
            .withLineSeparator("\n")
            .withColumnSeparator(',')
            .withQuoteChar('"')
        return try {
            mapper
                .readerFor(String::class.java)
                .with(schema)
                .readValues<String>(inputStream)
                .readAll()
        } catch (e: IOException ) {
            logger.error("Error parsing file", e)
            emptyList()
        } catch (e: NoSuchElementException) {
            throw FileParsingError(e)
        }
    }

我得到:

expected == actual
|        |  |
|        |  [abcdefghijklmno, ]
|        false
[abcdefghijklmno, pqrstuwzabcdefh, ijklmnopqrstuwyz, zabcdefghijklmopqr]

如何解决?

最佳答案

这对我有用:

return mapper.readerForListOf(Map.class)
    .with(schema)
    .with(CsvParser.Feature.WRAP_AS_ARRAY) // <-- This.
    .readTree(content);

关于Jackson CsvMapper 只读取第一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60110870/

相关文章:

java - Dropwizard 反序列化数组

java - JSON 和 BSON 哪个更轻量级?

java - 如何转义 Jackson-dataformat-csv 库中的分隔符?

java - 配置 CsvMapper 以检查写入的每个值

java - 使用 jackson-dataformat-csv 从 csv 解析双引号

jackson - 使用 Jackson CSV 忽略特定列解析 CSV 文件

java - Spring 对象映射器 covertValue 方法不转换某些字段

java - 将 Json 解析为分区日期时间

java - 使用 Jackson CSV 将 CSV 解析为 POJO 列表

java - ISO 8601、JsonFormat、TimeZone 和末尾的 +0000 出现 InvalidFormatException