Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala Play json transformer,如果条件允许,则从输入json中删除分支_Json_Scala_Playframework - Fatal编程技术网

Scala Play json transformer,如果条件允许,则从输入json中删除分支

Scala Play json transformer,如果条件允许,则从输入json中删除分支,json,scala,playframework,Json,Scala,Playframework,我们在Scala Play json文档中找到了这个示例: 我如何在条件允许的情况下修剪树枝?例如,如果key22值是空字符串,则修剪key22分支?我看不到一种内置的方法,但我们可以自己构造一个 我们有路径-我们需要一个检查值的读取器,如果它满足一个条件,就删除路径 因此,我们可以通过选择路径来获取值的读取器。我们对此进行平面映射,获取值,如果测试为真,则返回一个删减的读取器,否则返回一个直通读取器,因为我们不想删减该值 结果是一个读者做了我们想要的 def pruneIf(path: Js

我们在Scala Play json文档中找到了这个示例:


我如何在条件允许的情况下修剪树枝?例如,如果
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)