Scala播放json变换器,如果条件为

时间:2017-11-22 14:47:24

标签: json scala playframework

我们在Scala Play json doc中找到了这个例子: https://www.playframework.com/documentation/2.6.x/ScalaJsonTransformers

// Case 6: Prune a branch from input JSON
val jsonTransformer = (__ \ 'key2 \ 'key22).json.prune
json.transform(jsonTransformer)

如何在条件下修剪分支?例如,如果key22值为空字符串,则修剪key22分支?

1 个答案:

答案 0 :(得分:1)

我看不到内置的方法,但我们可以自己构建一个。

我们有道路 - 我们希望读者能够检查价值,如果符合条件,则会修剪路径。

因此,我们可以通过选择路径来获取读者的价值。我们对此进行平面映射,取值,如果测试为真,则返回修剪过的读者,否则返回直通读者,因为我们不想修剪该值。

结果是读者能够做我们想要的事。

select date_add(curdate(), interval 30 minute) >= '2017-11-22 16:00:00' and
       '2017-11-22 16:00:00' <= date_add(curdate(), interval 15 hour)

这给了我们:

def pruneIf(path: JsPath)(test: (JsValue => Boolean)): Reads[JsValue] = 
  path.json.pick.flatMap(value => 
    if (test(value)) path.json.prune.map(identity) else __.json.pick)