我正在使用以下签名编写方法:
def foo[A: Marshaller, B: Marshaller](f: A => B) = {...}
问题是A
可能是Unit
。有意义的是,应该有一个已经存在的Unit
json格式转换为空字符串和从空字符串转换,并且有意义的是,即使它不存在,实现这样的格式应该是微不足道的。 。如何定义或导入Unit
的json格式,就像我为case类所做的那样:
implicit val myFormat = jsonFormat4(myCaseClassWithFourFields)
答案 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
(例如Int
,Long
,{{1 }},Float
,Double
,Byte
,Short
,BigDecimal
,BigInt
,Unit
,Boolean
,Char
和String
)在特征Symbol
中。
您只需混合BasicFormats即可使用。