Ric*_*ard 6 java csv json jackson fasterxml
问题:您可以使用 CsvMapper/CsvSchema 将 csv 转换为map<string, object>对象不是字符串的对象,例如布尔值或整数吗?
详细信息:我有一些 csv 文件,我想将它们直接转换为 json。我无权访问 POJO。但我确实有一个 xml 架构文件,其中包含 csv 数据中列的类型信息。
经过一些搜索后,我决定使用 Jackson 的 CsvMapper/CsvSchema 将 csv 文件转换为 json。我创建了一个包含列类型信息的 CsvSchema,然后将 csv 文件转换为 Map<> 文件,然后将映射文件转换为 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
Run Code Online (Sandbox Code Playgroud)
我正在将 csv 数据读入 Map,其中字符串是属性名称,对象是值。我认为对象的值类型将基于架构列类型。即,如果它是 ColumnType.BOOLEAN,则 Object 将是布尔值。然而,Map 中的所有对象都是字符串类型。
我假设 CsvSchema ColumnType 将在转换中使用,因为在 csv 中,所有内容都是字符串,因此您不需要该模式。我显然错过了一些东西。令人惊讶的是,Google 并没有过多提及使用 CsvMapper。
有谁知道是否可以从 CSV 转换为 json 并使用 json 类型(布尔/整数),还是所有内容都必须是字符串?