通过圆镜在任何级别修改视场

时间:2019-03-20 08:48:05

标签: circe

我正在尝试通过圆视光学技术在任何级别上转换“模型”字段,但在实现这一点方面遇到了困难。

输入:

{
  "model":"ModelExample1",
  "test": {
    "model":"ModelExample2"
  }
}

预期的运量:

{
  "model":"AAAA-ModelExample1",
  "test": {
    "model":"AAAA-ModelExample2"
  }
}

1 个答案:

答案 0 :(得分:1)

圆形光学元件不提供开箱即用的递归修改功能。但是,您可以创建一个:

import io.circe.optics.JsonPath._

val modifyModel: Json => Json = root.model.string.modify("AAAA-" + _)

def modifyAllModels(value: Json): Json =
    root.each.json.modify(modifyAllModels)(modifyModel(value))

此修改将应用于所有键,而不仅是test-如果您不希望这样做,则将each中的test交换为modifyAllModels