问题:你能否使用CsvMapper / CsvSchema将csv转换为map<string, object>
,其中对象不是字符串,如布尔值或整数?
详细信息:我有一些我想直接转换为json的csv文件。我无法访问POJO。但我确实有一个xml架构文件,其中包含csv数据中列的类型信息。
在做了一些搜索后,我决定使用Jackson的CsvMapper / CsvSchema将csv文件转换为json。我创建了一个包含列类型信息的CsvSchema,然后将csv文件转换为Map&lt;&gt;然后将文件转换为json。这一切都很好,除了一件事。所有json属性都是字符串,甚至是CsvSchema定义为布尔和数字类型的属性。下面是一个小片段,展示了我正在做的事情。
String csvEmployeeData="\"Bob\",25,true\n" +
"\"Joe\",35,false\n" +
"\"Tom\",45,false\n";
CsvSchema schema = CsvSchema.builder().addColumn("name", ColumnType.String)
.addColumn("age", ColumnType.NUMBER)
.addColumn("isManager", ColumnType.BOOLEAN)
.build();
CsvMapper csvMapper = new CsvMapper();
MappingIterator<Map<String, ? extends Object>> it = csvMapper.readerFor(Map.class)
.with(schema)
.readValues(csvEmployeeData);
List<Map<String, ? extends Object>> objectList=it.readAll();
Map<String, ? extends Object> employeeObj=objectList.get(0);
assertEquals("java.lang.Integer", employeeObj.get("age").getClass().getTypeName());
// Integer age=(Integer)employeeObj.get("age");
// java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer
我正在将csv数据读入Map,其中字符串是属性名称,Object是值。我认为Object的值类型将基于Schema ColumnType。即如果它是ColumnType.BOOLEAN,那么Object将是布尔值。但是,Map中的所有对象都是String类型。
我假设将在转换中使用CsvSchema ColumnType,因为在csv中,所有内容都是字符串,因此您不需要该模式。我显然遗漏了一些东西。令人惊讶的是,Google并没有在使用CsvMapper方面做出太多贡献。
有没有人知道是否可以从CSV转到json并使用json类型(bool / integer)或者所有内容都必须是字符串?