高效编码:JSON To Scala Case Classes — Numio
把 JSON 示例转换为 Scala case class。嵌套对象变为独立的 case class,数组变为 Seq[...];null 值和数组中部分元素缺少的键变为 Option[...]。
在加入 Circe、Play JSON 或 uPickle 编解码器之前,先起草 JSON API 的模型。
JSON
Scala Case Class
适用场景
- 在加入 Circe、Play JSON 或 uPickle 编解码器之前,先起草 JSON API 的模型。
- 把 Kafka 或 HTTP 示例载荷转换为 Spark 或 Akka 作业使用的 case class。
使用方法
- 粘贴 JSON 对象;对于可选字段,请包含多个键不同的数组元素。
- 检查输出:根类名为 RootInterface,嵌套类按键名的 PascalCase 命名(speakers 变为 Speakers)。
- 复制这些类并重命名,把示例无法确定类型的 Option[Any] 或 Seq[Any] 改为具体类型。
JSON 输入
{
"id": 7,
"type": "conference",
"price": 49.9,
"venue": null,
"tags": ["jvm", "fp"],
"speakers": [
{ "name": "Martin", "talk": "Keynote" },
{ "name": "Li", "talk": "Effects", "slides": "https://example.com/s.pdf" }
]
}Scala case class
case class RootInterface( id: Int, `type`: String, price: Double, venue: Option[Any], tags: Seq[String], speakers: Seq[Speakers] ) case class Speakers( name: String, talk: String, slides: Option[String] )
功能与限制
在浏览器中由本站自己的生成器运行,不调用服务器。此页面没有设置项,也不会添加 import 或编解码器派生。
数组的所有元素会被合并:在部分元素中缺失或为 null 的键变为 Option[...],12 与 1.5 同时出现时变为 Double。
始终为 null 的值得到 Option[Any],空数组得到 Seq[Any],因为示例中没有可推断的类型。
保留字和不是合法标识符的键会用反引号包裹,例如 `type`;snake_case 键保持原样。
FAQ
可空字段会生成 Option 吗?
会。值为 null 的键变为 Option[...];如果该键在其他示例中有实际值,就按那些值确定类型,否则为 Option[Any]。数组中部分元素缺少的键也是 Option。
根节点为 JSON 数组时会怎样?
其元素会合并为一个 RootInterface case class,部分元素缺少的键为 Option,并添加 type RootInterfaceList = Seq[RootInterface]。
64 位 ID 会被定为 Long 吗?
只有当示例值超出 Int 范围(约 ±21 亿)时才会。其他整数变为 Int,因此可能增长的 ID 或时间戳请改为 Long。