Jackson-DataFormat-csv: valor del número de mapeo sin POJO

Igor Luzhanov:

Estoy tratando de analizar un archivo CSV con jackson-dataformat-csvy quiero para mapear la columna numérica al tipo de número de java.

CsvSchema schema = CsvSchema.builder().setUseHeader(true)
    .addColumn("firstName", CsvSchema.ColumnType.STRING)
    .addColumn("lastName", CsvSchema.ColumnType.STRING)
    .addColumn("age", CsvSchema.ColumnType.NUMBER)
    .build();

CsvMapper csvMapper = new CsvMapper();  

MappingIterator<Map<String, Object>> mappingIterator = csvMapper
        .readerFor(Map.class)
        .with(schema)
        .readValues(is);        

while (mappingIterator.hasNext()) {
    Map<String, Object> entryMap = mappingIterator.next();
    Number age = (Number) entryMap.get("age");
}       

Estoy esperando entryMap.get("age")que debería ser una Number, pero me da Stringen su lugar.

Mi archivo CSV:

firstName,lastName,age
John,Doe,21
Error,Name,-10

Sé que CsvSchemafunciona bien con POJOs, pero necesito para procesar esquemas CSV arbitrarias, así que no puedo crear una nueva clase de Java para cada caso.

Cualquier forma de CSV de análisis en un mecanografiada Mapo Array?

Jeronimo Backes:

Puede utilizar univocidad-analizadores para este tipo de cosas. Es más rápido y de manera más flexible:

var settings = new CsvParserSettings(); //configure the parser if needed
var parser = new CsvParser(settings);

for (Record record : parser.iterateRecords(is)) {
    Short age = record.getShort("age");
}

Para obtener un mapa escrito, comunicar al analizador lo que es del tipo de las columnas que se está trabajando:

parser.getRecordMetadata().setTypeOfColumns(Short.class, "age" /*, and other column names*/);

//to get 0 instead of nulls when the field is empty in the file:
parser.getRecordMetadata().setDefaultValueOfColumns("0", "age", /*, and other column names*/);

// then parse
for (Record record : parser.iterateRecords(is)) {
    Map<String,Object> map = record.toFieldMap();
}

Espero que esto ayude

Exención de responsabilidad: yo soy el autor de esta biblioteca. Es de código abierto y libre (licencia Apache 2.0)

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=210969&siteId=1
Recomendado
Clasificación