Csv File to Kotlin Data Class Parser
Currently, it requires to have@ExperimentalStdlibApi
on the class/method using this Library.
Requires kotlin-csv by doyaaaaaken for reading csv file.
- No hard configuration
- No invasive annotations to data class
- Custom mapping
- Nullable Data Types
- Short
- Int
- Long
- Float
- Double
- Boolean
- String
- LocalTime
- LocalDateTime
- LocalDate
- Custom Formatting
//doyaaaaaken's kotlin-csv
implementation("com.github.doyaaaaaken:kotlin-csv-jvm:0.15.2")
//kotlin-grass
implementation("io.github.blackmo18:kotlin-grass-core-jvm:1.0.0")
implementation("io.github.blackmo18:kotlin-grass-parser-jvm:0.8.0")
<dependency>
<groupId>com.github.doyaaaaaken</groupId>
<artifactId>kotlin-csv-jvm</artifactId>
<version>0.15.2</version>
</dependency>
<dependency>
<groupId>io.github.blackmo18</groupId>
<artifactId>kotlin-grass-core-jvm</artifactId>
<version>1.0.0</version>
</dependency>
<dependency>
<groupId>io.github.blackmo18</groupId>
<artifactId>kotlin-grass-parser-jvm</artifactId>
<version>0.8.0</version>
</dependency>
short | int | long | float | double | boolean | string |
---|---|---|---|---|---|---|
0 | 1 | 2 | 3.0 | 4.0 | true | hello |
data class PrimitiveTypes(
val short: Short,
val int: Int,
val long: Long,
val float: Float,
val double: Double,
val boolean: Boolean,
val string: String
)
If a variable in your data class is a nullable, all you have to do is mark it with ?
data class NullableData(
val nullableString: String?,
val nullableInt: Int? = null,
...
)
val csvContents = csvReader().readAllWithHeader(file)
val dataClasses = grass<PrimitiveTypes>().harvest(csvContents)
val contents = File("file/path").inputStream()
val dataClasses: Flow<PrimitiveTypes> = csvReader().openAsync(contents) {
val data = readAllWithHeaderAsSequence().asFlow()
grass<PrimitiveTypes>().harvest(data)
}
Option | default value | description |
---|---|---|
dateFormat | yyyy-MM-dd |
date format |
timeFormat | HH:mm |
time format |
dateTimeSeparator | (space) |
date time separator |
trimWhiteSpace | true |
trims white spaces on csv entries |
ignoreUnknownFields | false |
ignore unknown / unmapped fields in input |
caseSensitive | true |
case sensitive header matching |
customKeyMap | null |
Map<String,String> custom key mapping, priority if not empty or null |
customKeyMapDataProperty | null |
Map<String, KProperty<*>> custom key mapping |
time | datetime | date |
---|---|---|
12:00 | 2020-12-31 12:00 | 2020-12-31 |
implementation("io.github.blackmo18:kotlin-grass-date-time-jvm:0.8.0")
data class DateTimeTypes(
val time: LocalTime,
val datetime: LocalDateTime,
val date: LocalDate,
)
val grass = grass<DateTimeTypes> {
dateFormat = "MM-dd-yyyy"
timeFormat = "HH:mm:ss"
dateTimeSeparator = "/"
customDataTypes = arrayListOf(Java8DateTime)
}
hour | birthdate |
---|---|
12:00 | 2020-12-31 |
data class DateTime(
val time: LocalTime,
val date: LocalDate,
)
val grass = grass<DateTimeTypes> {
customKeyMap = mapOf("hour" to "time", "birthdate" to "date")
}
// or
val grass = grass<DateTimeTypes> {
customKeyMapDataProperty = mapOf("hour" to DateTime::time, "birthdate" to DateTime::date)
}
Contributions, issues and feature requests are welcome!
Feel free to check issues page.
Give a ⭐️ if this project helped you!
Copyright © 2020 blackmo18.
This project is Apache License 2.0 licensed.
This project inspired ❤️ by kotlin-csv