使用圆形光学修改任何级别的字段

Modify field at any level with circe-optics

我正在尝试使用环形光学在任何级别转换 "model" 场,但我在实现这一点时遇到了困难。

输入:

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

预期输出:

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

Circe optics 不提供开箱即用的递归修改功能。但是,您可以制作一个:

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 换成 modifyAllModels 中的 test