这个问题不是特定于JsValue,它是scala中所有不可变对象的,我想编辑它的一部分,并保持其余的原样。 例如,我有这个对象:
"references": {
"hsId": "37395615-244b-4706-b6f5-237272f07140",
"others": {
"path": "rewr",
"externalId": "ewr",
"version": "2"
}
}
并且假设我只想编辑版本。
感谢
答案 0 :(得分:1)
好吧我找到了一种解决方法, 但我觉得它是一个补丁而不是最好的答案
val references: JsObject = (json \ "references").as[JsObject]
val newVersion = JsObject(List(("others", JsObject(List(("version", JsString("3")))).as[JsValue])))
val newReferences = references.deepMerge(newVersion)
答案 1 :(得分:1)
您可以使用JSON transformers。我们想说我们要将版本更改为"3"
。
val js: JsValue = Json.parse("""
{
"references": {
"hsId": "37395615-244b-4706-b6f5-237272f07140",
"others": {
"path": "rewr",
"externalId": "ewr",
"version": "2"
}
}
}
""")
// Define the transformer
val transformer = (__ \ "references" \ "others").json.update(
__.read[JsObject].map{o => o ++ Json.obj("version" -> "3")}
)
val newJs = js.transform(transformer)
这将复制整个对象,然后替换version
分支上的others
。