首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Scala更新jsobject键

Scala更新jsobject键
EN

Stack Overflow用户
提问于 2014-10-18 17:11:54
回答 1查看 3.1K关注 0票数 0

我正在使用play api。我想更新JsObject中的密钥。我该怎么做呢。这是我的密码

代码语言:javascript
复制
import play.api.libs.json._
var sessionJson = Json.toJson(
                               Map(
                                   "sId" -> toJson(sId),
                                   "events" -> Seq(
                                                   toJson(
                                                          Map(
                                                              "eType" : toJson((eventJson \ "eType" ).as[String]),

                                                         )   
                                              )
                                    )
                               )
                    )

def reduceFunction(sessionJson1 : JsObject, sessionJson2: JsObject) = {
    var eventList = (sessionJson1 \ "events").as[Seq] ++ (sessionJson2 \ "events").as[Seq]
    println(eventList)
   //I want to do something like this
   sessionJson1['events'] = eventList
}

我已经通过了https://www.playframework.com/documentation/2.1.1/ScalaJsonTransformers,但没有找到任何解决方案。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-10-18 17:30:34

JsObject是不可变的,所以您不能“更新”它,但是您可以在现有的基础上构造新的对象,并替换一些字段。

奇怪的是,在JsObject上没有这样的方法。JsObject.+不检查密钥是否已经存在,在我看来就像一个bug。

可以使用++,它将两个对象合并在一起:

代码语言:javascript
复制
scala> import play.api.libs.json._
import play.api.libs.json._

scala> val j = Json.obj("firstName" -> "John", "secondName" -> "Doe")
j: play.api.libs.json.JsObject = {"firstName":"John","secondName":"Doe"}

scala> j ++ Json.obj("firstName" -> Json.toJson("Jane"))
res0: play.api.libs.json.JsObject = {"secondName":"Doe","firstName":"Jane"}

或者您可以轻松地构造这样的函数:

代码语言:javascript
复制
def withField[A](j: JsObject, key: String, value: A)(implicit w: Writes[A]) = 
  j ++ Json.obj(key -> value)

scala> withField(j, "firstName", "Jane")
res1: play.api.libs.json.JsObject = {"secondName":"Doe","firstName":"Jane"}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26442417

复制
相关文章

相似问题

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