【发布时间】:2014-04-14 04:25:15
【问题描述】:
我正在选择一个好的 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 - 回想起来,这真的不应该让人感到意外。
我查看了文档和代码,但找不到选择键为 name 的特定字段的方法。我错过了什么吗?
另一种解决方案(这个可行)似乎是合并两个 JValue 对象,但似乎有点冗长:
john merge JObject(JField("name", "foo") :: Nil)
是否有一种内置的、更易读的方法来实现相同的结果?我可能可以写一个从JField 到JObject 的隐式转换,但lift-json 还没有这样的机制似乎很奇怪。如果我必须打赌,那就是我没有找到它,而不是它不存在。
编辑:我现在觉得有点傻
john transform {
case JField("name", "Foo") => JField("name", "foo")
})
不是世界上最佳的解决方案,但可读性和简洁性完美。
【问题讨论】: