circe - 使用圆形光学修改任何级别的字段
问题描述
我正在尝试使用 circe-optics 在任何级别上转换“模型”字段,但我在实现这一目标时遇到了麻烦。
输入:
{
"model":"ModelExample1",
"test": {
"model":"ModelExample2"
}
}
预期输出:
{
"model":"AAAA-ModelExample1",
"test": {
"model":"AAAA-ModelExample2"
}
}
解决方案
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
换成test
in modifyAllModels
。
推荐阅读
- python - 尝试使用 numpy.ndarray 时,Tensorflow Convert To Tensor 抛出异常
- bash - 如何以列的最后一个数字的增量连接文件的内容
- android - Android:以正确的方式应用 MVVM(第三部分)
- javascript - 动画不适用于 React 组件
- c# - 无法在 c# 中使用 Google.Cloud.TextToSpeech.V1 指定音频配置文件
- python - 循环字典并添加一些东西
- reactjs - 将一个类传递给 React 组件,以便它可以创建所述类的新实例?
- machine-learning - 分类平衡目标 y [0,1] 但不平衡特征 x [many 0 , few 1s] ,最大化精度
- powershell - 将域中最后更改密码的每个用户的 PowerShell 结果导出为 CSV
- java - 我在适用于 Android 的 Windows 子系统(Windows 11)上测试了我的应用程序,它给了我一堆“更新颜色缓冲区”日志