Scala 循环光学递归遍历JSON

Scala 循环光学递归遍历JSON,scala,circe,Scala,Circe,我有一个结构复杂的json。大概是这样的: { "a":"aa", "b":"bb", "c":[ "aaa", "bbb" ], "d":{ "e":"ee", "f":"ff" } } 我想把所有字符串值都大写。说: 但正如预期的那样,只更新根值 如何使circe optics递归遍历所有字符串值? JSON结构事先未知 这是关于斯卡斯蒂的报告 通过评论: 我希望所有字符串值都大写,而不仅仅是根值: { "a":"AA",

我有一个结构复杂的
json
。大概是这样的:

{
  "a":"aa",
  "b":"bb",
  "c":[
    "aaa",
    "bbb"
  ],
  "d":{
    "e":"ee",
    "f":"ff"
  }
}
我想把所有字符串值都大写。说:

但正如预期的那样,只更新根值

如何使
circe optics
递归遍历所有字符串值?
JSON
结构事先未知

这是关于斯卡斯蒂的报告


通过评论: 我希望所有字符串值都大写,而不仅仅是根值:

{
  "a":"AA",
  "b":"BB",
  "c":[
    "AAA",
    "BBB"
  ],
  "d":{
    "e":"EE",
    "f":"FF"
  }
}

下面是一个部分解决方案,如中所示,它不是完全递归的,但它将使用示例中的
json
解决问题:


val level1UpperCase=root.each.string.modify(s=>s.toUpperCase)
val level2UpperCase=root.each.each.string.modify(s=>s.toUpperCase)
val uppered=(level1UpperCase和level2UpperCase)(json.right.get)

以下可能是一种新的方法。为了完整性,在这里添加它

import io.circe.Json
导入io.circe.parser.parse
导入io.circe.optics.JsonOptics_
进口单片眼镜。功能。电镀
val json=parse(
"""
|{
|“a”:“aa”,
|“b”:“bb”,
|“c”:[
|“aaa”,
|{“k”:“asdads”}
|  ],
|“d”:{
|“e”:“ee”,
|“f”:“ff”
|  }
|}
|“.stripMargin)。对。获取
val transformed=platted.transform[Json]{j=>
j、 配对{
case Some=>Json.fromString(s.toUpperCase)
案例无=>j
}
}(json)
println(transformed.spaces2)
给予


你能显示你想要的数据结果吗?你的问题不是很清楚。@Rex更新了问题
{
  "a":"AA",
  "b":"BB",
  "c":[
    "AAA",
    "BBB"
  ],
  "d":{
    "e":"EE",
    "f":"FF"
  }
}
{
  "a" : "AA",
  "b" : "BB",
  "c" : [
    "AAA",
    {
      "k" : "ASDADS"
    }
  ],
  "d" : {
    "e" : "EE",
    "f" : "FF"
  }
}