scala - 使用circe-optics递归遍历JSON

标签 scala circe

我有一个 json具有复杂的结构。像这样的东西:

{
  "a":"aa",
  "b":"bb",
  "c":[
    "aaa",
    "bbb"
  ],
  "d":{
    "e":"ee",
    "f":"ff"
  }
}

我想大写所有字符串值。 The Documentation说:
root.each.string.modify(_.toUpperCase)

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

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

这是example在斯卡斯蒂。

通过评论:
我希望所有字符串值都大写,而不仅仅是根值:
{
  "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 andThen level2UpperCase)(json.right.get)

关于scala - 使用circe-optics递归遍历JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55356876/

相关文章:

json - 自动推导结构类型的编解码器

scala - PairRDD 的总和值

Scala 对大数的阶乘有时会崩溃,有时不会

scala - 案例类中的解码圆数组总是无法通过案例类比较测试?

scala - 使用Circe将字段添加到json

json - 使用 Circe 将包含 HList 的案例类解析为 JSON 字符串

scala - Shapeless:无法找到隐含的余积映射

scala - 如何从 Scala 源代码创建 jar?

scala - 如何强制 Scala 使用不同的库版本?

scala - Scala中,final val 和 val 之间的区别