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"
}
}