在使用play框架时,我似乎对如何正确地反序列化json感到困惑。使用json,看起来你只需要定义一个case类,然后自动反序列化一个json字符串(从json文档中窃取)。
case class Person(id: Long, name: String)
parse[Person]("""{"id":1,"name":"Coda"}""") //=> Person(1,"Coda")但是,使用play框架,你必须编写大量样板代码来做同样的事情。例如从他们的文档中。
case class Foo(name: String, entry: Int)
object Foo {
implicit object FopReads extends Format[Foo] {
def reads(json: JsValue) = Foo(
(json \ "name").as[String],
(json \ "entry").as[Int])
def writes(ts: Foo) = JsObject(Seq(
"name" -> JsString(ts.name),
"entry" -> JsNumber(ts.entry)))
}
}这似乎需要更多的工作,所以我假设我要么没有正确地使用它,要么不太理解这样做的好处。有没有捷径可以让我不必写所有这些代码?如果没有,我是否应该在Action中使用json来解析传入的json字符串?看起来好像asText返回的是一个空白字符串,即使asJson正常工作,fine...which也会让我相信我肯定做错了什么。
谢谢
发布于 2012-07-30 02:41:06
我认为你的问题有两个答案。
隐式val SampleSetFormat: FormatSampleSet = productFormat3("sensorId","times",val同意有更多恼人的模板,这是Play人员使用这种方法的主要原因,这样他们就可以在编译时完全确定正确的串行器。因此没有像在杰克森那样的反射成本。
发布于 2012-12-29 08:17:43
我完全是Play和Jerkson的新手,但我全心全意地推荐使用最少的样板方法(在每个Action中使用Jerkson lib )。我发现这样做在哲学上更符合Scala,而且工作得很好。
https://stackoverflow.com/questions/10906861
复制相似问题