如何更改嵌套Json中的值

如何更改嵌套Json中的值,json,playframework,Json,Playframework,这与类似,但情况更为复杂 考虑一个先前构造的值 val x = Json.obj( "key_a" -> "value_a", "key_b" -> Json.obj( "key_a" -> 0, "key_b" -> 1, "key_c" -> Json.obj( "key_a" -> Json.obj( "key_

这与类似,但情况更为复杂

考虑一个先前构造的值

val x = Json.obj(
     "key_a" -> "value_a",
     "key_b" -> Json.obj(
          "key_a" -> 0,
          "key_b" -> 1,
          "key_c" -> Json.obj(
              "key_a" -> Json.obj(
                  "key_a" -> "value_a",
                  "key_b" -> 2
              ),
              "key_b" -> "value_b",
              "key_c" -> "value_c"
          ),
     "key_c" -> "value_c",
     ...
)
假设我想将
x\“key\u b”\“key\u c”\“key\u a”\“key\u a”
更改为
“new\u value”

我认为对象在
play.api.libs.json
中是不可变的,所以我想我实际上是在寻找原始对象的副本,其中一个值发生了变化

最好的方法是什么


我不认为这是一个病态的用例

在Javascript中,它将是一行

x.key_b.key_c.key_a.key_a = 'new_value';

我希望Scala解决方案不会更糟。

您不需要修改JSON。引入语法错误并杀死整个json构造太容易了。您将json解码回本地数据结构,在那里进行修改,然后重新编码回json。@MarcB,所谓“json”,我的意思与参考问题中的意思相同,作为
play.api.libs.json
包的成员,而不是
String
类型的值。