java - 单义性 csv 解析器 setTypeOfColumns 不起作用
问题描述
此测试失败:预期:<java.lang.Integer> 但为:<java.lang.String>
@Test
public void testSetTypeOfColumns() throws IOException {
String data = "ID,NAME" + System.lineSeparator() + "2,Chris";
InputStream csvStream = new ByteArrayInputStream(data.getBytes());
CsvParser parser = new CsvParser(new CsvParserSettings() {
{
setHeaderExtractionEnabled(true);
}
});
parser.beginParsing(csvStream);
parser.getRecordMetadata().setTypeOfColumns(Integer.class, "ID");
parser.getRecordMetadata().setTypeOfColumns(String.class, "NAME");
Record record = parser.parseNextRecord();
Map<String, Object> map = record.toFieldObjectMap();
assertEquals(Integer.class, map.get("ID").getClass());
}
我的代码有问题吗?这是一个错误吗?
解决方案
将记录转换为对象值的映射。必须使用 RecordMetaData.convertFields(Conversion[]) 或 RecordMetaData.convertIndexes(Conversion[]) (Conversion[])} 注册转换。没有已知转换的列会将其值作为纯字符串放入映射中。
http://docs.univocity.com/parsers/2.7.2/index.html?com/univocity/parsers/common/record/Record.html
看看他们的教程如何映射到一个简单的 POJO。
https://www.univocity.com/pages/univocity_parsers_tutorial#using-annotations-to-map-your-java-beans
// BeanListProcessor converts each parsed row to an instance of a given class, then stores each instance into a list.
BeanListProcessor<TestBean> rowProcessor = new BeanListProcessor<TestBean>(TestBean.class);
CsvParserSettings parserSettings = new CsvParserSettings();
parserSettings.getFormat().setLineSeparator("\n");
parserSettings.setProcessor(rowProcessor);
parserSettings.setHeaderExtractionEnabled(true);
CsvParser parser = new CsvParser(parserSettings);
parser.parse(getReader("/examples/bean_test.csv"));
// The BeanListProcessor provides a list of objects extracted from the input.
List<TestBean> beans = rowProcessor.getBeans();
推荐阅读
- object - 如何查看对象数组中的特定属性
- text-to-speech - 使用时不需要的暂停
用于 TTS 的 SSML 中的标记 - python - 替换选择数据框列(基于其他条件)问题
- javascript - 安装 material-ui v3.0.3 时 JSON 输入文件意外结束
- c - 如何优化从输入中读取字符,以便用户无需事先指定字符数
- java - 通过传递用户 ID 列表更新多个用户
- java - “com.fasterxml.jackson.databind.JsonMappingException:预期类型为浮点数、整数或字符串。” 使用 ObjectMapper 转换 java.time.Instant
- java - 具有多个输入数字和运算符的命令行计算器?
- python - 如何使用乌龟将图形放在一个圆圈内?
- spring - spring boot 2.x kebab-case 格式的问题