我正在选择一个好的 Scala JSON 库,并且共识似乎lift-json
是目前最好的选择。
在使用它(版本 2.5.1)一段时间后,我已经能够相当轻松地完成大部分我需要的事情,除了一个:修改现有的JValue
.
假设我有以下实例JValue
:
val john = ("id" -> 1) ~
("name" -> "Foo") ~
("nested" ->
("id" -> 2) ~
("name" -> "Bar"))
我想将父元素的名称从更改Foo
为foo
. 我认为该transform
方法是要走的路:
john transform {
case JField("name", _) => JField("name", "foo")
})
但这会将父元素和嵌套元素的name
字段都更改为foo
- 回想起来,这真的不应该是一个惊喜。
我查看了文档和代码,但找不到一种方法来选择具有 .key 键的特定字段name
。我错过了什么?
另一种解决方案(这个可行)似乎是合并两个JValue
对象,但似乎有点冗长:
john merge JObject(JField("name", "foo") :: Nil)
是否有一种内置的、更易读的方法来实现相同的结果?我可能可以编写一个从JField
to的隐式转换,但还没有这样的机制JObject
似乎很奇怪。lift-json
如果我必须打赌,那就是我没有找到它,而不是它不存在。
编辑:我现在觉得有点傻
john transform {
case JField("name", "Foo") => JField("name", "foo")
})
不是世界上最佳的解决方案,但完全可读和简洁。