首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Play框架ScalaJsonGenerics vs Jerkson进行反序列化

使用Play框架ScalaJsonGenerics vs Jerkson进行反序列化
EN

Stack Overflow用户
提问于 2012-06-06 08:36:32
回答 2查看 664关注 0票数 1

在使用play框架时,我似乎对如何正确地反序列化json感到困惑。使用json,看起来你只需要定义一个case类,然后自动反序列化一个json字符串(从json文档中窃取)。

代码语言:javascript
复制
case class Person(id: Long, name: String)
parse[Person]("""{"id":1,"name":"Coda"}""") //=> Person(1,"Coda")

但是,使用play框架,你必须编写大量样板代码来做同样的事情。例如从他们的文档中。

代码语言:javascript
复制
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也会让我相信我肯定做错了什么。

谢谢

EN

回答 2

Stack Overflow用户

发布于 2012-07-30 02:41:06

我认为你的问题有两个答案。

  1. 对于稍微少一点的样板,您可以使用Play支持来处理case类。下面是一个包含三个字段的case类的示例:

隐式val SampleSetFormat: FormatSampleSet = productFormat3("sensorId","times",val同意有更多恼人的模板,这是Play人员使用这种方法的主要原因,这样他们就可以在编译时完全确定正确的串行器。因此没有像在杰克森那样的反射成本。

票数 1
EN

Stack Overflow用户

发布于 2012-12-29 08:17:43

我完全是Play和Jerkson的新手,但我全心全意地推荐使用最少的样板方法(在每个Action中使用Jerkson lib )。我发现这样做在哲学上更符合Scala,而且工作得很好。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10906861

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档