JSONをScalaケースクラスに変換 — 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 やコーデックの derive も追加しません。
配列の全要素がマージされます。一部の要素で欠けているキーや null のキーは Option[...] になり、12 と 1.5 が混在すると Double になります。
常に null の値は Option[Any]、空配列は Seq[Any] になります。サンプルに示す型がないためです。
予約語や識別子として使えないキーは `type` のようにバッククォートで囲まれます。snake_case のキーはそのまま残ります。
FAQ
null 許容フィールドに Option は生成されますか?
はい。値が null のキーは Option[...] になります。同じキーに実際の値を持つサンプルがあればその型、なければ Option[Any] です。配列の一部の要素にしかないキーも Option になります。
ルートが JSON 配列の場合はどうなりますか?
要素が 1 つの RootInterface case class にマージされ、一部の要素にしかないキーは Option になります。さらに type RootInterfaceList = Seq[RootInterface] が追加されます。
64 ビットの ID は Long になりますか?
サンプルの値が Int の範囲(約 ±21 億)を超える場合だけです。それ以外の整数は Int になるので、大きくなりうる ID やタイムスタンプは Long に変更してください。