【问题标题】:trait with only case objects custom implementation in spray json仅在喷雾 json 中具有案例对象自定义实现的特征
【发布时间】:2016-12-12 10:30:04
【问题描述】:

鉴于我有以下声明:

sealed trait Color
case object DColor extends Color
case object CColor extends Color
case object VColor extends Color

然后我在这样的案例类中使用它们:

case class CustomColor(c: Color)
CustomColor(VColor)

现在我希望它生成一个像这样的 JSON:

{c:"v_color"}

【问题讨论】:

  • 您的问题是关于如何将此案例类转换为 JSON 或如何在 Spray 中使用该序列化程序?

标签: json scala akka akka-http spray-json


【解决方案1】:

应该定义一个自定义格式:

object MyJsonProtocol extends DefaultJsonProtocol {
    implicit object ColorJsonFormat extends RootJsonFormat[Color] {
               def write(c: Color) = c match {
                  case VColor => JsString("v_color")
                  case _ => JsString("foo")
               }

               def read(value: JsValue) = ???
    }

    implicit val customColorFormat = jsonFormat1(CustomColor.apply)
}

然后

alex-alex@ import MyJsonProtocol._
alex-alex@ CustomColor(VColor).toJson
res18: JsValue = {"c":"v_color"}

【讨论】:

    猜你喜欢
    • 2014-11-13
    • 2013-02-15
    • 2013-05-31
    • 2021-08-20
    • 2013-11-01
    • 1970-01-01
    • 2013-03-14
    • 2013-09-11
    • 2015-12-15
    相关资源
    最近更新 更多