我在scala中有一个函数,可以转换值并生成字符串。

strOut = translate(strIn)

假设以下JSON对象:

{
  "id": "c730433b-082c-4984-3d56-855c243265f0",
  "standard": "stda",
  "timestamp": "tsx000",
  "stdparms" : {
    "stdparam1": "a",
    "stdparam2": "b"
  }
}

以及转换功能提供的以下映射:

"stda" -> "stdb"
"tsx000" -> "tsy000"
"a" -> "f"
"b" -> "g"

使用translate函数转换整个JSON对象的最佳方法是什么? 我的目标是获得以下结果:

{
  "id": "c730433b-082c-4984-3d56-855c243265f0",
  "standard": "stdb",
  "timestamp": "tsy000",
  "stdparms" : {
    "stdparam1": "f",
    "stdparam2": "g"
  }
}

由于项目相关的原因,我必须使用io.circe库。

#1楼 票数:0 已采纳

如果您事先知道要翻译哪些字段,或者该字段适用什么翻译,则可以使用Cursors遍历JSON树。 或者,如果字段本身是固定的(您总是知道需要哪些字段), 光学可能需要更少的代码。

当您到达正确的位置时,可以应用翻译。

但是,当您不知道什么时候/什么地方适用时,使用字符串方法可能更容易查找/替换。

请注意,您作为示例提供的JSON并不是有效的JSON。

  ask by Santiago Nuñez-Corrales translate from so

未解决问题?本站智能推荐:

2回复

Circe无法将原始json转换为case类错误:找不到类型为io.circe.generic.decoding.DerivedDecoder的Lazy隐含值

我已经为JSON表示定义了几个案例类,但我不确定我是否正确地执行了它,因为有很多嵌套的case类。 spec,meta等实体的类型为JSONObject以及Custom对象本身。 这是我定义的所有类: 这是我需要转换的自定义K8s对象的JSON结构: 更新:我想将JSON
2回复

使用 circe 将 Scala None 编码为 JSON 值

假设我有以下 case 类需要使用 circe 序列化为 JSON 对象: 现在我需要将val b = B(None, Some(A("a", Some("aa")), 5)编码为 JSON 但我希望能够控制它是否输出为 或者 使用Printer的dropNullKeys配置,例如b.a
1回复

用circe中的状态转换JSON

注意:为了后代,我正在从Circe Gitter频道复制这个问题。 假设我们要翻译这个JSON文档: 进入: 即,我们希望用简单的递增数字标识符替换每个id的UUID,并用对新标识符的引用替换对每个UUID的所有引用。 我们怎么能用circe做到这一点 ?
2回复

如何通过Circe修改json的值类型

我需要捕获json的int值,并通过某个映射表将其更改为字符串值。 我使用circe,我知道如何在不更改值类型的情况下修改值,例如: 输出为: 但是,实际上,我需要做的是将int值更改为某个字符串值,即1->“ A”,2->“ B”,依此类推,问题是:“ modif
1回复

如何将单行json转换为多行json? 尝试使用 circe 得到了不良结果

示例代码 得到输出(空格2) 所需的输出格式 如果它有效,我也可以使用任何其他库。
2回复

使用circe以递归方式将JSON树转换为其他格式(XML,CSV等)

为了将JSON节点转换为JSON之外的其他格式(如XML,CSV等),我想出了一个解决方案,我必须访问circe的内部数据结构。 这是我的工作示例,它将JSON转换为XML String(不完美,但你明白了): 结果是: 如果低级JSON对象(如JBoolean, JStr
1回复

使用Circe将JSON数组解析为案例类

让我们使用这个例子JSON: 没有什么特别的,事实上,这可以简单地解析为案例类: 这很棒...... 问题 我实际上知道每个数组的大小都是2,而且 第一个元素 - >它是“率” 第二个元素 - >它是“金额” 我想用Circe修
3回复

使用 Circe 解码 Json 字符串

我有一个 Json 字符串作为 我有以下案例类来解码 json 字符串。 此外,上述 case 类中的提供者是可选的,它可能存在也可能不存在于 json 字符串中。 我想用 circe 解码这个 我知道我需要使用自定义 circe 编解码器,但我无法做到,有人可以帮忙解决这个问题。