跳到主要内容

JSON 转 Scala case class 生成器

粘 JSON 出 Scala case class, 嵌套对象生成子类, 数组转 List, null 包成 Option, 全程浏览器本地。

  • 本地处理
  • 分类 格式转换
  • 适合 把粘贴内容或本地文件转成更适合交付的格式。
示例:
类型、子类和 Option 是怎么推断的

每个 JSON 对象生成一个命名 case class, 字段名转成 camelCase。整数推断成 Int (超出 32 位 Int 范围时用 Long); 带小数的推断成 Double; 一个字段有时整数有时带小数, 会放宽到 Double。嵌套对象会被抽成独立子类, 名字是 父类名+键名 (user.address 变 UserAddress)。对象数组折叠成一个类, 你拿到的是一个 List[T] 而不是一堆近似重复的类; 某些元素缺的键, 开启 Option 时会变成 Option[T]。只出现过 null 的值推断成 Option[Any]。代码库偏好不可变 Seq 别名时, 勾上 Seq[T] 即可。

这个工具能做什么

把任意 JSON 粘进来, 不管是 Play Framework 的请求体、Akka HTTP 的 响应、Spark 的配置, 还是上游某个 API 的样本, 都能拿到一组干净的 Scala `case class` 声明, 直接拖进 `.scala` 文件就能用。每个 JSON 对象生成一个命名 case class; 嵌套对象会被抽成以父类名加键名命名的 子类, 所以 `user.address` 变成 `UserAddress`, 而不是一团匿名内联 结构。数字不会被一锅端: 整数样本推断成 `Int`, 超出 32 位范围的整数 推断成 `Long`, 带小数的推断成 `Double`。对象数组会折叠成一个 case class, 所以 `[{a:1},{a:1,b:2}]` 出来是一个 `List[T]` 且 `b` 标成 可选, 而不是两个几乎重复的类型。值为 `null` 或在部分数组元素里缺失 的键, 在保持 Option 开关打开时会变成 `Option[T]`, 这是 Scala 里 建模可空 JSON 的地道写法。代码库偏好不可变 Seq 别名时把数组切到 `Seq[T]`, 根类名随便改, 结果可一键复制或下载。全部在客户端运算, 你粘的 JSON 不碰服务器。

工具细节

输入
文本 + 数值 + 结构化内容
页面会根据工具类型展示文本框、数值控件、文件选择或结构化输入。
输出
即时结果 + 复制 + 下载
结果区优先给出可操作结果,支持项会显示复制、下载或可视化预览。
隐私
浏览器本地处理
主工具逻辑未发现外部 API 调用,输入通常留在当前标签页内处理。
保存 / 分享
可分享链接状态
关键设置会进入 URL,复制链接后别人能复现同一组参数。
性能预算
首屏 JS ≤ 9 KB
没有声明 WASM 依赖,适合快速打开和移动端使用。
适用场景
格式转换 · 程序员
分类和职业标签用于推荐相关工具、组织内链,并帮助用户快速判断是否适合当前任务。

怎么用

  1. 1. 输入

    把内容粘贴或拖入工具面板。

  2. 2. 处理

    点击按钮,在浏览器内本地处理,文件不上传。

  3. 3. 复制 / 下载

    一键复制结果或下载到本地。

JSON 转 Scala 适合怎么用

适合把内容从一种实际格式转成另一种可用格式。

适合转换的任务

  • 把粘贴内容或本地文件转成更适合交付的格式。
  • 放进大流程前,先预览转换结果是否可靠。
  • 修正常见格式不匹配,不用打开完整编辑器。

转换检查项

  • 源格式比较乱时,先拿一小段试转。
  • 转换后检查编码、分隔符和换行符。
  • 结果确认前保留原始内容。

下一步可以接着做

这些入口会把当前任务接到更完整的工具链里。

  1. 1 JSON 转 Kotlin 数据类 JSON 转 Kotlin data class, 粘 JSON 出 val 属性, camelCase 字段, 可空 T?, 嵌套类, 带 kotlinx.serialization @SerialName、Gson @SerializedName 或 Moshi @Json 注解。 打开
  2. 2 JSON 转 Rust 结构体 JSON 转 Rust struct, 粘 JSON 出带 serde derive 的结构体, 字段 snake_case, 自动 serde rename, 可空用 Option, 数组用 Vec, 嵌套对象生成子 struct。 打开
  3. 3 JSON 转 Go 结构体 JSON 转 Go struct, 粘 JSON 出带 json tag 的结构体, 字段自动导出, 嵌套对象生成子 struct, 可空字段用指针, 支持 int64 与 omitempty。 打开

真实使用场景

  • 接第三方 API 时不用手写类

    你在接一个上游服务, 它的 user 对象有 25 个字段, 还散在几个嵌套 对象里。打一次接口, 把 JSON 粘进来, 根名设成 `ApiUser`, 把输出 复制进你的 model 文件。嵌套的 `profile` 对象单独抽成 `ApiUserProfile`, `roles` 数组变成类型化的 `List[ApiUserRole]`, 而不是一个还要你手动模式匹配的 `Map[String, Any]`。

  • 给新 endpoint 生成请求和响应模型

    同事发来他在做的 `/orders` POST 的一个 JSON body 样例。粘进来, 根名 `CreateOrderRequest`, 保持 Option 开着, 这样他标成可选的 字段会以 `Option[T]` 出现。响应样例也粘进来命名 `CreateOrderResponse`。两个 case class, 类型齐全, 在你们任何一方 写路由之前就提交进 DTO 文件。

  • 更快写出 circe 或 play-json 解码器

    手写 circe codec 第一步就是 case class。把样本 payload 粘进来, 生成 case class, 旁边再加 `deriveDecoder[ApiUser]`。因为可空和 缺失字段已经以 `Option[T]` 出现, 派生出的解码器遇到缺失键也不会 抛异常, 你省掉了那一轮因为漏了某个可选字段而在运行时报错的折腾。

  • 把配置文件变成类型化的 Scala

    你的服务读一个 `config.json`, 里面有 server 块和嵌在里面的 tls 块。粘进来, 根名 `Config`, 拿到 `Config`、`ConfigServer`、 `ConfigServerTls` 三个嵌套 case class, 端口是 `Int`, 开关是 `Boolean`。放进你的配置模块, 启动时解码一次, 这样某个键拼错会在 解码时带着清晰路径报错, 而不是稍后在某个请求深处才挂掉。

常见踩坑

  • 粘一个对象进来然后期待某些字段是可选的。单个对象没有「键缺失」信号, 所以所有字段都是必需。Option 推断只在「多个对象组成的数组」里生效, 有的元素带某个键、有的不带。想从一个样本探索可选性, 把它包成 `[{...}]`。

  • 忘了只出现过 null 的字段会变成 `Option[Any]`。`{"meta": null}` 出来是 `meta: Option[Any]`, 因为 null 不带类型信息。如果你知道真实形状, 粘一个非 null 样本比如 `{"meta": {"k": 1}}`, 工具才能推出像样的子 case class。

  • 粘 JSON5、带注释的 JSON 或末尾逗号。工具用严格的 `JSON.parse`, 注释、不带引号的键、末尾逗号都会带着行列报错。先剥掉, 或者先过一道 JSON 格式化工具。

隐私说明

你粘进来的 JSON 不会离开这个浏览器标签页。解析和类型推断走浏览器 内建的 `JSON.parse`, 没有任何网络请求, 也不对文本框内容做 analytics。 分享链接会把你的输入和选项编码进 URL 以便复现结果, 也就是说由你 决定何时分享。如果 payload 敏感, 比如内部 ID 或生产响应, 直接复制 生成的 Scala 代码, 不要分享链接。只有选项布尔值, Option 和 Seq, 会存进 localStorage, 让你偏好的风格在多次访问之间保留。

常见问题

类似工具组合

做你这行的人, 还会一起用这些。

Made by Toolora · 100% client-side · Updated 2026-06-13