播放:如何将列表附加到现有 JSON 变量?

Play: how to append a list to an existing JSON variable?

给定以下 json 变量

   var json: JsValue = JsObject(Seq(
      "retcode" -> JsString("1")
    ))

和以下 Writes 对象 User class

implicit val w2 : Writes[User] = (
      (JsPath \ "id").write[Int] and
      (JsPath \ "userid").write[String] and
      (JsPath \ "name").write[String]
  ) (unlift(User.unapply))

假设我有一个用户列表

var list : List[User] = ( some list )

如何将列表附加到初始 json 变量?

假设您想以这样的方式结束(用户列表作为另一个 key/value 添加到您的原始对象):

{
  "retcode" : "1",
  "users" : [ {
    "id" : "1",
    "userid" : "u1",
    "name" : "Bob"
  }, {
    "id" : "2",
    "userid" : "u2",
    "name" : "Fred"
  } ]
}

你可以做到:

val newJson = json.as[JsObject] + ("users" -> Json.toJson(list))

如果您将 json 声明为 JsObject 而不是 JsValue,则可以跳过 .as[JsObject]。 (如果您不知道您的 JSON 绝对代表一个对象,而不是一个列表或基元,那么 as 可能是不安全的。请参阅 using validation 以获得更好的处理方法。 )

假设我们需要添加/附加 json 到现有的。

考虑

userAddressList = Users multiple address list.

现在您想将以上两个信息附加到单个 json 对象中:

val res = JsObject(Seq(
("userAddresses", Json.toJson(userAddressList)),
("userDetails", Json.toJson(userService.getUserDtlsByID(userId)))
))

它会产生如下结果:

{
"userAddresses" :[{"addId":"001"},{"addId":"002"}],
"userDetails":{"id":"001", "name":"MAC", "designation":"Manager"}
}

我希望这会奏效 ;-)