在Scala中将案例类转换为CSV

Sou*_*nta 5 csv macros scala case-class

是否有一种将案例类转换为CSV值的优雅方法.

例如 -

 case class Person( name : String, age : Int, gender: String, address : Option[String])
Run Code Online (Sandbox Code Playgroud)

我在考虑使用宏,但想知道是否还有其他选择.

注意:案例类不包含任何用户定义的字段.

Jus*_*ony 12

如何implicitsproductIterator

implicit class CSVWrapper(val prod: Product) extends AnyVal {
    def toCSV() = prod.productIterator.map{
                    case Some(value) => value
                    case None => ""
                    case rest => rest
                  }.mkString(",")
}

Person("name", 30, "male", None).toCSV()
Run Code Online (Sandbox Code Playgroud)

  • @AlekseyIzmailov我会将这些细节留给实施者,因为他们的用例可能允许它 (3认同)

mar*_*iop 8

是的,在Scala中,有一种方法可以将case类转换为CSV而根本不添加样板.例如PureCSV的基础上,惊人的无形库,可以做到这一点:

scala> import purecsv.safe._
scala> case class Interval(start: Long, end: Long)
scala> Interval(10,20).toCSV()
res1: String = 1,10
scala> Seq(Interval(1,10),Interval(11,20)).toCSV("|")
res2: String =
1|10
11|20
Run Code Online (Sandbox Code Playgroud)

注意:我是PureCSV的作者.

  • PureCSV 的问题是它不适用于嵌入式案例类 (2认同)