在Scala中将JSON转换为CSV?

时间:2014-08-11 09:08:26

标签: json scala csv

是否有任何可用的库可以将JSON字符串(最可能超过1行数据)转换为CSV文件。

我在Scala中搜索了很多这样的库,但我找不到。

我需要做的是从数据库源检索数据,结果集采用JSON格式,并将它们转换为CSV格式。

在我做之前将JSON转换为相关的Seq [case-class]并尝试使用以下库:

但是,如果案例类包含深层次结构,那么这些并没有多大用处。

任何建议??

2 个答案:

答案 0 :(得分:0)

product-collections会将Seq [案例类]转换为csv。

case class Foo(a:Int,b:String)
Seq(Foo(1,"aa"),Foo(2,"bb")).csvIterator.mkString("\n")
res27: String =
1,"aa"
2,"bb"

为了反序列化json,我可能会使用scala酸洗。

"深层次结构"可能会有问题。

答案 1 :(得分:0)

不完全确定深层次结构的含义。像这样的东西?

case class Baz(i: Int)
case class Bar(baz: Baz)
case class Foo(bar: Bar)

在这种情况下,kantan.csv可以回答方程式的一部分:将深层案例类层次结构转换为CSV数据。如果你不介意无形的依赖,这是相当微不足道的:

import kantan.csv.ops._
import kantan.csv.generic.codecs._

val fs: List[Foo] = ???

fs.foldLeft(new File("output.csv").asCsvWriter[Foo])(_ write _).close

如果你有无形状的问题,你可以自己为你的案例类提供编码器:

import kantan.csv._

implicit val bazCodec = Codec.caseCodec1(Baz.apply, Baz.unapply)(0)
implicit val barCodec = Codec.caseCodec1(Bar.apply, Bar.unapply)(0)
implicit val fooCodec = Codec.caseCodec1(Foo.apply, Foo.unapply)(0)

我认为还有一些更多的功能,但仍然可以接受。