如何序列化一个简单的scala类到CSV文件?



我有一个简单的scala类,有150多个字段,使用scala 2.11。

我想将实例转换为csv并写入文件系统。我找到了几个库,但它们都是Scala case类。因为Scala的限制,我不能使用用例类。

你能给我推荐一下从类中获取csv而不使用toCsv方法中的字段名的方法吗?

class ToCsv (
field1: String,
field2: String,
...
) {
def toCsv(): String = s"$field1 $field2 …"
}

尝试使用

com.fasterxml.jackson.dataformat.csv
val mapper = new CsvMapper
val schema = mapper
.schemaFor(classOf[Test.FiveMinuteUser])
.withoutHeader
.withColumnSeparator('t')

但是得到空字符串

如果有人遇到这个问题,这是我的工作方式。

//@JsonPropertyOrder(Array("firstFieldHeaderNameInCsv", "secondFieldHeaderNameInCsv")) // important!
// ^^^ without annotation properties ordered alphabetically
class Test {
@JsonProperty("firstFieldHeaderNameInCsv")
var field1: String = _
@JsonProperty("secondFieldHeaderNameInCsv")
var field2: String = _
}

object Runner extends App {
val testInstance = new Test()
testInstance.field1 = "myValue"
testInstance.field2 = "myOtherValue"
val mapper = new CsvMapper()
mapper
.writerFor(classOf[Array[Test]])
.`with`(mapper.schemaFor(classOf[Test]).withHeader())
.writeValue(new File("/path/to/file.csv"), Array(testInstance))
}

输出到/path/to/file.csv

"firstFieldHeaderNameInCsv","secondFieldHeaderNameInCsv"
myValue,myOtherValue

更多细节可以在这篇文章中找到https://cowtowncoder.medium.com/writing - csv -与-杰克逊- 204 fdb3c9dac

相关内容

  • 没有找到相关文章

最新更新