我知道我们可以按键更新JsObject,但是如何在JsObject中更新密钥呢?
例如,
val queryText = (Json.parse(normalQuery) \"query" \"query_string" \"query").as[String]我可以得到字符串值,但是如何更新它呢?
updatedJson ++ Json.obj("query/query_string/query" -> Json.toJson("new_test"))这是行不通的。
发布于 2017-03-22 22:56:04
解决方案1
您应该阅读有关JsPath的文档。你要找的方法是JsPath.json.update
import play.api.libs.json._
val baseJson = Json.obj("query" -> Json.obj("query_string" -> Json.obj("query" -> "old_value")))
val updater: Reads[JsObject] = __.json.update((__ \"query" \"query_string" \"query").json.put(JsString("new_value")))
val updated: JsResult[JsObject] = baseJson.transform(updater)解决方案2
您也可以像尝试的那样使用++添加字段,但是您需要正确地定义对象:
val overrider = Json.obj("query" -> Json.obj("query_string" -> Json.obj("query" -> "new_value")))
val badOverriden = baseJson ++ overrider实际上,这不起作用,因为++不是递归的:它只覆盖JSON对象顶层的字段。但是,您可以使用同样的deepMerge,递归地:
val overriden = baseJson deepMerge overriderhttps://stackoverflow.com/questions/42963864
复制相似问题