如何将匿名类转换为json?

时间:2013-03-01 11:44:18

标签: json scala playframework playframework-2.1

我有以下代码:

def test = Action {
  val Anon = new {
    val foo = "foo"
    val bar = "bar"
  }

  Ok(Json.toJson(Anon))
}

我得到了这个编译错误:

  

没有为类型Object找到Json反序列化器{val foo:String; val bar:   串}。尝试为此类型实现隐式写入或格式。

这个问题的快速解决方法是什么?我已经在这里发现了另一个与此错误相关的问题,但也许它更具体/更复杂。

1 个答案:

答案 0 :(得分:1)

据我所知,唯一的方法是引入结构类型:

  type AnonType = {
    def foo:String
    def bar:String
  }

然后你可以做

implicit val writeAnon1 = 
  ((__ \ "foo").write[String] and
   (__ \ "bar").write[String])
   {anon:AnonType => (anon.foo, anon.bar)}

implicit val writeAnon2 = new Writes[AnonType] {
  def writes(o:AnonType) =
    Json toJson Map(
      "foo" -> o.foo,
      "bar" -> o.bar)
}