左側に Scala を貼り付けて 「変換」 を押してください — JSON に変換しますScala コードを貼り付けてください

このツールでできること

フィールドが十数個ある Scalacase class に対して、対応する JSON ペイロードが必要になる場面 — テスト、API 呼び出し、Kafka メッセージの fixture など — で、手で組み立てるのはすぐに面倒になります。ここに Scala を貼り付けると、有効な JSON が返ります。単一の case class、複数の case class が入ったファイル、名前付き引数で組み立てたインスタンス — どれも同じフローで同じ結果になります。

このコンバーターは、よくある Scala の JSON ライブラリが生成するものに合わせています。Circe、Play JSON、uPickle はいずれも case class のフィールドを JSON のキーに変換してシリアライズします — ここで得られる結果もまさにそれです。IntLongDoubleBigDecimal は JSON の数値になります。Boolean はそのまま真偽値です。Option[A]Some(x) のときは値になり、None のときは null または省略されます。InstantLocalDateTime、その他の java.time 型は ISO-8601 の文字列として出力されます。

コレクションの扱いも素直です。ListSeqVectorSet はすべて JSON 配列になります。Map[String, A] は JSON オブジェクトに。タプル は異なる型の値を持つ JSON 配列になります。case class の子を持つ sealed trait(ADT)を貼り付けると、各バリアントはそれぞれの形でシリアライズされ、パーサーは主要ライブラリが使う ADT の discriminator パターンを認識します。1 つのファイル内にあるトップレベルのクラスを複数貼り付ければ(インスピレーションが欲しければ Scala リポジトリ を参照)、それぞれが独立した JSON エントリとして出力されます。

使い方

ステップは 3 つ。case class 1 つでもモデルファイル丸ごとでも同じ流れです。

1

Scala を貼り付ける(またはサンプルを試す)

左側のエディタに Scala をそのまま貼り付けてください。case classsealed trait 階層、インスタンス複数クラス — どれでも問題ありません。まず実例を見たい場合は サンプルを読み込む を押してください。

import 文、package 宣言、アノテーションはそのままで大丈夫です。データでないものはパーサーが無視します。言語仕様の詳細は docs.scala-lang.org が公式リファレンスです。

2

「変換」を押す

緑の 変換 ボタンをクリックしてください。ツールは Scala を読み取り、すべてのクラスとフィールドを辿り、一度に JSON を生成します。処理中は短いローディング表示が出ます。

3

JSON をコピーする

右側のパネルにインデント済みの JSON が表示されます。ScalaTest の spec、Akka HTTP のモックレスポンス、Play の fixture、API ドキュメントなどにそのまま貼り付けてください。

実際に便利な場面

ScalaTest の fixture

Scala サービスのテストで HTTP クライアントをスタブするための JSON ボディが必要なとき。case class を貼り付けてペイロードを取得し、spec に差し込むだけです。

Akka / Play の HTTP ペイロード

自分のサービスに POST するための JSON を case class から起こせます。新しいエンドポイントを組む際の curl 動作確認にも便利です。

Kafka メッセージのサンプル

新しい Kafka トピック向けのサンプル JSON メッセージを、ドメインの case class から直接生成できます — 時間とともにずれていく手書きのサンプルは不要です。

コードと一致するドキュメント

API ドキュメント向けの JSON 例を、実際の case class から直接作れます。モデルが変わってもドキュメントが正しい状態を保てます。

よくある質問

Option の値はどうシリアライズされますか?

Some(x) は値 x になり、None は JSON の null になります。Circe のデフォルト挙動と同じです。None のキーを省略したい場合は、後処理で取り除けます — デフォルトは形を予測しやすくするためのものです。

sealed trait と ADT はどう扱われますか?

case class を子に持つ sealed trait は、各バリアントごとにシリアライズされます。複数のバリアントが親 trait を共有している場合は、Circe や Play JSON で使われる一般的な discriminator パターン({"type": "OrderPlaced", ...})が適用されるので、データを ADT に戻すラウンドトリップが可能です。

java.time 型の扱いは?

InstantLocalDateLocalDateTimeZonedDateTime は ISO-8601 の文字列としてシリアライズされます。Circe、Play JSON、uPickle に共通する慣例で、java.time へのラウンドトリップもきれいに行えます。

Map、List、Vector、Set は扱えますか?

はい。ListSeqVectorSet はすべて JSON 配列になります。Map[String, A] は JSON オブジェクトに — 文字列キーでない map(Map[Int, A])は、JSON が文字列キーしかサポートしないため、キー/値ペアの配列として出力されます。

複数の case class が入ったファイルを丸ごと貼り付けても大丈夫?

はい。トップレベルのクラスはそれぞれ独立した JSON エントリになり、ネストされたインスタンスは展開されます。companion object、暗黙の変換、ヘルパーメソッドはスキップされ、データだけが出力に反映されます。

コードは保存されますか?

貼り付けた Scala は変換のためにバックエンドに送られますが、永続化はしません。ペイロードのログも取りません。機密性の高いコードの場合は、貼り付ける前に内容を確認してください。

関連して使えるツール

Scala → JSON はあくまで一部です。次のツールと組み合わせると便利です: