You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何移除Circe asJson输出中Data字段的Case Class包装块?

解决方案

要移除Data字段中Case Class名称的外层包装,直接输出内部字段,可以利用circe的generic-extras模块配置编码规则,无需手动编写复杂的自定义编解码器。

修改后的代码示例

import io.circe.generic.extras._
import io.circe.syntax._

@ConfiguredJsonCodec
sealed trait Data

object Data {
  // 配置编码时不添加类型鉴别器(即去掉Case Class名称的外层键)
  implicit val config: Configuration = Configuration.default.withNoDiscriminator
}

case class Failed(foo: String, bar: String) extends Data
case class Success(foo1: String, bar1: String) extends Data
case class Task(Foo: String, Data: Data)

val something = Task("test", Failed("1", "2"))
println(something.asJson)

代码说明

  1. 替换导入依赖:用circe-generic-extras的ConfiguredJsonCodec替代原有的auto导入,该模块支持自定义编码配置。
  2. 配置编码规则:在Data的伴生对象中定义Configuration,调用withNoDiscriminator方法关闭默认的类型鉴别器(即不再用Case Class名称作为外层键包裹子类型字段)。
  3. 保留原有结构:Failed、Success和Task的定义无需改动,配置会自动应用到所有Data的子类型。

执行结果

运行修改后的代码,输出将符合期望:

{"Foo" : "test", "Data" : {"foo" : "1", "bar" : "2"}}

内容的提问来源于stack exchange,提问作者Danny Wilcox

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 05:25:40