【问题标题】:Parsing double quote from csv using jackson-dataformat-csv使用 jackson-dataformat-csv 从 csv 解析双引号
【发布时间】:2018-05-13 04:00:50
【问题描述】:

我有一个包含以下内容的 csv

EANHotelID|SequenceNumber|Name|Address1|Address2|City|StateProvince|PostalCode|Country|Latitude|Longitude|AirportCode|PropertyCategory|PropertyCurrency|StarRating|Confidence|SupplierType|Location|ChainCodeID|RegionID|HighRate|LowRate|CheckInTime|CheckOutTime
541454|99999999|Hotel Maan Residency|"B" Wing, Gopal Palace, opp. ocean park|Naherunagar-Satellite Road|Ahmedabad||380 015|IN|23.02266|72.53842|AMD|1|INR|3.0||ESR|Near Kankaria Lake|||0|0|10:00 AM|10:00 AM

现在我正在尝试使用以下代码将此 csv 中的每一行作为对象读取

    CsvMapper mapper = new CsvMapper();
    mapper.findAndRegisterModules();

    File csvFile = new File("D:\\ActivePropertyList.txt.bak2");

    CsvSchema schema = CsvSchema.emptySchema().withHeader().withColumnSeparator('|').withNullValue("");
    MappingIterator<Map<String,String>> it = mapper.readerFor(Map.class).with(schema)
                .readValues(csvFile);

    while (it.hasNextValue()) {
        Map<String,String> value = it.nextValue();
    }

但由于 csv 中存在 "B",它失败了。我收到以下错误:

原因:com.fasterxml.jackson.core.JsonParseException: Unexpected 字符('W'(代码 87)):预期的分隔符('"'(代码 34))或 [来源: (com.fasterxml.jackson.dataformat.csv.impl.UTF8Reader);线:2, 列:43]

如何正确解析 csv 中的双引号?我尝试过使用schema.withEscapeChar() schema.withQuoteChar(),但我无法让它工作。

【问题讨论】:

  • 我设法通过在架构上使用 withoutQuoteChar() 来解决它。尽管我对幕后发生的事情没有正确的解释。如果有人能提供一些启示,将不胜感激。

标签: java jackson-dataformat-csv


【解决方案1】:

在架构上使用 withoutQuoteChar() 来处理 csv 内容中的双引号,即

CsvSchema.emptySchema().withHeader().withColumnSeparator('|').withNullValue("").withoutQuoteChar();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-20
    • 1970-01-01
    • 1970-01-01
    • 2011-12-12
    • 2017-01-23
    • 1970-01-01
    相关资源
    最近更新 更多