[英]Scala json object as argument for case class
我有一个保存为json格式字符串的数据源。 我想做的是读取每个json记录作为case class
,我使用json4s
作为解析器。 并使用extract
方法获取案例类。
我的课是这样的:
import org.json4s._
import org.json4s.JsonDSL._
import org.json4s.jackson.JsonMethods._
case class Order(
order_id: String,
buyer_id: String,
seller_id: Long,
price: Double
)
解析代码为:
file.map(parse(_).extract[Order])
但这是在类之外完成的,我想要的是json字符串作为class Order
的构造函数参数
但据我所知,case类构造函数必须使用默认构造函数。
所以有办法解决吗?
您可以将伴随对象用于以下目的:
import org.json4s._
import org.json4s.JsonDSL._
import org.json4s.jackson.JsonMethods._
case class Order(
order_id: String,
buyer_id: String,
seller_id: Long,
price: Double
)
object Order {
def apply(file: File): Order = {
file.map(parse(_).extract[Order])
}
}
然后像这样使用它:
val file = openFile(...)
val order = Order(file)
您可能还希望implicit
:
implicit def jsonStrToOrder(s: String): Order = parse(s).extract[Order]
val orders: List[Order] = file
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.