Scala Play json transformer,如果条件允许,则从输入json中删除分支
我们在Scala Play json文档中找到了这个示例:Scala Play json transformer,如果条件允许,则从输入json中删除分支,json,scala,playframework,Json,Scala,Playframework,我们在Scala Play json文档中找到了这个示例: 我如何在条件允许的情况下修剪树枝?例如,如果key22值是空字符串,则修剪key22分支?我看不到一种内置的方法,但我们可以自己构造一个 我们有路径-我们需要一个检查值的读取器,如果它满足一个条件,就删除路径 因此,我们可以通过选择路径来获取值的读取器。我们对此进行平面映射,获取值,如果测试为真,则返回一个删减的读取器,否则返回一个直通读取器,因为我们不想删减该值 结果是一个读者做了我们想要的 def pruneIf(path: Js
我如何在条件允许的情况下修剪树枝?例如,如果
key22
值是空字符串,则修剪key22
分支?我看不到一种内置的方法,但我们可以自己构造一个
我们有路径-我们需要一个检查值的读取器,如果它满足一个条件,就删除路径
因此,我们可以通过选择路径来获取值的读取器。我们对此进行平面映射,获取值,如果测试为真,则返回一个删减的读取器,否则返回一个直通读取器,因为我们不想删减该值
结果是一个读者做了我们想要的
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)
这给了我们:
val jsonTrue = Json.parse("""{ "key2" : { "key22" : true } }""")
val jsonFalse = Json.parse("""{ "key2" : { "key22" : false } }""")
val jsonTransformer = pruneIf(__ \ 'key2 \ 'key22)(_ == JsFalse)
jsonTrue.transform(jsonTransformer) // JsSuccess({"key2":{"key22":true}},)
jsonFalse.transform(jsonTransformer) // JsSuccess({"key2":{}},/key2/key22)
val jsonTrue = Json.parse("""{ "key2" : { "key22" : true } }""")
val jsonFalse = Json.parse("""{ "key2" : { "key22" : false } }""")
val jsonTransformer = pruneIf(__ \ 'key2 \ 'key22)(_ == JsFalse)
jsonTrue.transform(jsonTransformer) // JsSuccess({"key2":{"key22":true}},)
jsonFalse.transform(jsonTransformer) // JsSuccess({"key2":{}},/key2/key22)