【问题标题】:Scala json object as argument for case classScala json 对象作为案例类的参数
【发布时间】:2016-04-19 13:20:29
【问题描述】:

我有一个保存为 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的构造函数参数

但据我所知,案例类构造函数必须使用默认构造函数。

那么有没有办法解决这个问题?

【问题讨论】:

    标签: json scala


    【解决方案1】:

    您可以将伴随对象用于此类目的:

    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)
    

    【讨论】:

      【解决方案2】:

      你可能还想要implicit:

      implicit def jsonStrToOrder(s: String): Order = parse(s).extract[Order]
      val orders: List[Order] = file
      

      【讨论】:

        猜你喜欢
        • 2019-01-18
        • 2018-02-17
        • 2012-05-15
        • 2016-12-05
        • 2013-03-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多