【问题标题】:Add a field while serializing an object序列化对象时添加字段
【发布时间】:2023-03-06 00:20:01
【问题描述】:

我有一个案例类

case class Foo(bar: Int, baz: String)

我正在尝试为它编写一个 JSON 序列化。但是我还有一个额外的要求,要在生成的 Json 中再添加一个字段(比如“greeting”:“Hello”)

我正在尝试以下方面:

val writes = ((JsPath \ "bar").write[Int] and
   (JsPath \ "baz").write[String] and
   (JsPath \ "greeting").write[String])(unlift(Foo.unapply))

但是,我应该如何将静态的“Hello”字符串传递给上面的 Writes?

我如何使用这个writes 为我的Foo 类创建一个Format

【问题讨论】:

    标签: json playframework playframework-2.3


    【解决方案1】:

    我会这样做:

    val writes = Writes[Foo](f => {
      Json.obj(
        "bar" -> f.bar,
        "baz" -> f.baz,
        "greeting" -> "Hello")
    })
    

    缺点是您必须指定两次成员,但在需要额外控制的特殊情况下它很方便。

    【讨论】:

      【解决方案2】:

      在一次性场景中,您不想再定义另一个Writes,您可以这样做:

      Json.toJson(foo).as[JsObject] ++ Json.obj("greeting" -> "hello")
      

      【讨论】:

        【解决方案3】:

        我找到了另一个解决方案:

        val writes = ((JsPath \ "bar").write[Int] and
          (JsPath \ "baz").write[String] and
          (JsPath \ "greeting").write[String])((f: Foo) => (f.bar, f.baz, "Hello"))
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-08-18
          • 2017-06-08
          • 2016-01-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多