daz*_*ito 5 java csv parsing opencsv
我已经将OpenCSV版本从1.8升级到4.1。
对于4.1版,OpenCSV无法解析以下行:
MODIFY ACEUD-2052 TVG00420 8806088726823 0 645.88 TV Gerät LED-LCD 140 cm (55) Samsung UE55MU6402 (1500Hz,SmartTV,4K) USB-Recording 645.88 EUR "{""rawArticleType"":""TV Geräte/139 cm (55\"")/LCD""}"
MODIFY ACEUD-2052 TVG00515 8806088692401 0 2397.73 TV Gerät LED-LCD 190 cm (75) Samsung UE75MU8002 (2600Hz,SmartTV,4K) USB-Recording 2397.73 EUR "{""rawArticleType"":""TV Geräte/190 cm (75\"")/LCD""}"
MODIFY ACEUD-2052 VG001183 4719331339302 0 103.30 VGA 2GB GIGABYTE GeForce GTX1050 D5 2G (HDMI,DP,DVI) 103.30 EUR "{""rawArticleType"":""Grafikkarten/PCI-Express/NVIDIA""}"
Run Code Online (Sandbox Code Playgroud)
我相信问题出在json 的(75 \“”)部分。
OpenCSV失败,但以下情况除外:
java.lang.RuntimeException:java.lang.RuntimeException:java.io.IOException:CSV行末的带引号的未终止字段。丢失的文本的开头:[{“ rawArticleType”:“ TVGeräte/ 190厘米(75英寸)/ LCD”}修改ACEUD-2052 VG001183 4719331339302 0 103.3 ...]
版本1.8成功处理了相同的字符串
这是构建解析器和阅读器的代码
csvParser = new CSVParserBuilder()
.withSeparator((char) (int) separatorChar)
.withQuoteChar((char) (int) quoteChar)
.build();
csvReader = new CSVReaderBuilder(inputStreamReader)
.withCSVParser(csvParser)
.build();
Run Code Online (Sandbox Code Playgroud)
其中separatorChar是TAB(int值9)和quoteChar是'“',报价炭,(int值34)
上面的代码在1.8版上运行良好,但在4.1版上运行失败
在4.1版上,我看到有一个CSVParserBuilder()#withIgnoreQuotations(boolean value)OpenCSV4.1-Javadoc链接
如果我将其设置为true,那么将无例外地处理行,但是输出是{"rawArticleType":"Displays/60 - 61 cm (24""")/WUXGA (1920x1200)"}无效的json,下游的json解析器将跳过该输出,这使该解决方案不可接受。
我也尝试将转义字符设置为"(单引号),但随后OpenCSV引发了异常投诉
java.lang.UnsupportedOperationException:分隔符,引号和转义符必须不同!
再次,我的问题是我在解析这些字符串并输出有效的json时做错了什么?
编辑:
我正在使用读取CSV文件 csvReader.readNext()
| 归档时间: |
|
| 查看次数: |
1599 次 |
| 最近记录: |