首页 > 解决方案 > 使用圆形光学修改任何级别的字段

问题描述

我正在尝试使用 circe-optics 在任何级别上转换“模型”字段,但我在实现这一目标时遇到了麻烦。

输入:

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

预期输出:

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

标签: circe

解决方案


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

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换成testin modifyAllModels


推荐阅读