喷射单元类型的json格式

时间:2014-06-11 21:50:32

标签: scala spray

我正在使用以下签名编写方法:

def foo[A: Marshaller, B: Marshaller](f: A => B) = {...}

问题是A可能是Unit。有意义的是,应该有一个已经存在的Unit json格式转换为空字符串和从空字符串转换,并且有意义的是,即使它不存在,实现这样的格式应该是微不足道的。 。如何定义或导入Unit的json格式,就像我为case类所做的那样:

implicit val myFormat = jsonFormat4(myCaseClassWithFourFields)

2 个答案:

答案 0 :(得分:2)

据我所知,没有针对Unit的预定义json格式。 但是你可以编写自己的json格式:

import spray.json._
import DefaultJsonProtocol._

implicit object UnitJsonFormat extends JsonFormat[Unit] {
  def write(u: Unit) = JsObject()
  def read(value: JsValue): Unit = value match {
      case JsObject(fields) if fields.isEmpty => Unit
  }
}

使用它:

scala> println("").toJson

res0: spray.json.JsValue = {}

scala> res0.convertTo[Unit]

scala>

更新:我不确定你希望json看起来像Unit,请澄清。

答案 1 :(得分:0)

我遇到了这个问题,后来发现spray为最重要的JsonFormats提供了Scala Types(例如IntLong,{{1 }},FloatDoubleByteShortBigDecimalBigIntUnitBooleanCharString)在特征Symbol中。

您只需混合BasicFormats即可使用。