Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用模式和json类型将csv直接转换为json_Java_Json_Csv_Jackson_Fasterxml - Fatal编程技术网

Java 使用模式和json类型将csv直接转换为json

Java 使用模式和json类型将csv直接转换为json,java,json,csv,jackson,fasterxml,Java,Json,Csv,Jackson,Fasterxml,问题:能否使用CsvMapper/CsvSchema将csv转换为映射,其中对象不是字符串,比如布尔值或整数 详细信息:我有一些csv文件要直接转换为json。我没有POJO的权限。但是我有一个xml模式文件,其中包含csv数据中列的类型信息 在做了一些搜索之后,我决定使用Jackson的CsvMapper/CsvSchema将csv文件转换为json。我创建了一个包含列类型信息的CsvSchema,然后将csv文件转换为映射文件,然后将映射文件转换为json。除了一件事,一切都很好。所有jso

问题:能否使用CsvMapper/CsvSchema将csv转换为
映射
,其中对象不是字符串,比如布尔值或整数

详细信息:我有一些csv文件要直接转换为json。我没有POJO的权限。但是我有一个xml模式文件,其中包含csv数据中列的类型信息

在做了一些搜索之后,我决定使用Jackson的CsvMapper/CsvSchema将csv文件转换为json。我创建了一个包含列类型信息的CsvSchema,然后将csv文件转换为映射文件,然后将映射文件转换为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
String csvEmployeeData=“\'Bob\”,25,true\n+
“\'Joe\”,35岁,假\n”+
“\'Tom\”,45,假\n”;
CsvSchema schema=CsvSchema.builder().addColumn(“名称”,ColumnType.String)
.addColumn(“年龄”,ColumnType.NUMBER)
.addColumn(“isManager”,ColumnType.BOOLEAN)
.build();
CsvMapper CsvMapper=新的CsvMapper();
MappingIterator it=csvMapper.reader(Map.class)
.with(schema)
.读取值(csvEmployeeData);
List objectList=it.readAll();
Map employeeObj=objectList.get(0);
assertEquals(“java.lang.Integer”,employeeObj.get(“age”).getClass().getTypeName());
//整数年龄=(整数)employeeObj.get(“年龄”);
//java.lang.ClassCastException:java.lang.String不能转换为java.lang.Integer
我正在将csv数据读入一个映射,其中字符串是属性名,对象是值。我认为对象的值类型将基于模式ColumnType。也就是说,如果它是ColumnType.BOOLEAN,那么对象将是BOOLEAN。但是,地图中的所有对象都是字符串类型

我假设转换中将使用CsvSchema ColumnType,因为在csv中,所有内容都是字符串,因此不需要模式。我显然错过了什么。令人惊讶的是,谷歌在使用CsvMapper方面没有提出太多建议

是否有人知道如果可能,可以从CSV转换为json并使用json类型(bool/integer),或者所有内容都必须是字符串