FasterXML / jackson-dataformats-text

Uber-project for (some) standard Jackson textual format backends: csv, properties, yaml (xml to be added in future)

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Add support for "name:type" style Headers

cowtowncoder opened this issue · comments

Currently use of Header row (and manual construction of CsvSchema) assume that headers only specify name of column position. But there exists usage, wherein header line contain type mappings too:

name:string,enabled:boolean, ...

It would be great to support this.

There is an immediate problem with "type" definition: as things are, only a very limited set of types is recognized for CsvColumn. But we could divide implementation into two main parts:

  1. Support mapping to existing small set of types (probably allowing case-insensitive type definition)
  2. Support configurability of extension types, by providing converters from String value into target types.

For (2) there is also additional step needed: whereas we could expose JsonToken values for:

  1. Strings
  2. Numbers
  3. Booleans
  4. nulls

everything else would need to be exposed as JsonToken.VALUE_EMBEDDED_OBJECT.
But if so, any and all types could be supported -- as long as jackson-databind deserializers (JsonDeserializer impelmentations) consider possibility of embedded type.

Doing above is not trivial, but would be a very powerful mechanism for customized binding from CSV data. Some amount of duplication would likely result (for Converters) but that seems acceptable.