当前位置: 首页 > 知识库问答 >
问题:

Univoity csv解析器setTypeOf列不工作

金珂
2023-03-14

此测试失败:预期:

@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());
}

我的代码有问题吗这是一个bug吗?

共有1个答案

许华清
2023-03-14

将记录转换为对象值的映射。必须使用RecordMetaData注册转换。convertFields(转换[])或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();
 类似资料:
  • 我有一个带有简单表单的ejs模板,只有一个值: 在我的app.js我试图调用console.log(req.body),但它返回空 "{}". 这是我的app.js代码: 在其他问题上,很多人说他们会使用这款应用。使用(bodyParser.urlencoded({extended:false}));但一切都没有改变。我试过了。json()也是,但似乎没有什么变化。顺便说一句,我试过了。记录(请求

  • 传入我的应用程序ID。我在某处读到配置在解析服务器上不起作用,但想确认一下

  • 我只是试图将jsonarray解析为对象列表,但我总是得到一个错误

  • 我安装了最新版本的body parser(1.17.1),并按照其他人建议的顺序设置代码。 > 进口快递 导入体解析器 app=Express(); app.use(body Parser.json); 应用程序。使用(bodyParser.urlencoded({extended:false})); 但我经常遇到错误“TypeError:无法读取未定义的属性‘password’”。 事实上,我无

  • 我有一个像这样的web服务方法。我将通过POST发送JSON映射到该方法,但它没有正确设置address字段。我知道JSON是有效的,因为它直接从一个将一个人转储到JSON并读回它的单元测试出来。测试通过(反序列化的对象有2个电话号码),这是确切的字符串。 当我发布JSON时,它不会在对象上设置phone numbers映射。以下是输出: 信息:保存实体:Person{id=null,firstn

  • 问题内容: 我正在解析CSV文件,但是最后一行的最后9列为空,只有一行,并且用逗号分隔的字符串会忽略其余的空列。 这是演示此代码的代码: 列的大小为20,应为29。任何想法? 问题答案: 查看有关以下内容的文档: 该方法的工作方式就像通过调用带有给定表达式且限制参数为零的二参数拆分方法。因此,结尾的空字符串不包括在结果数组中。 因此,您需要查看其他方法的选项 limit参数控制应用图案的次数,因此