このツールの動作
JSON の標本が Scala の case class になります。オブジェクト一つにつき一つです。
{ "id": 1, "firstName": "Ada", "address": { "city": "Paris" } }
case class Root(
id: Long,
firstName: String,
address: Address
)
case class Address(
city: String
)
根がオブジェクトの配列なら、それにも名前がつきます。type Root = List[RootItem] という最上位の別名で、これは Scala 3 の書き方です。
バッククォートが鍵を保つ
{ "content-type": "text/html", "class": 1 }
case class Root(
`content-type`: String,
`class`: Long
)
Scala はバッククォートの中を識別子として受け取るので、項目名は JSON が言ったとおりのままでいられます。これは飾りの選択ではありません。circe も zio-json も upickle も、JSON 名を項目名から導きます。だからこの case class は、注釈も専用の復号器も無しに、あなたの荷をそのまま読みます。
もう一方の道——contentType へ改名する——は、それを結び直す設定済みの codec を要求します。そして、あなたがどのライブラリを使っているかは、標本には分かりません。
型、そして無知を認める二つ
整数は Long、小数は Double になります。JSON の数値は Int にも Float にも確実には収まらず、広く取るほうが、黙って溢れるよりましだからです。
null、空の配列、型の混ざった配列は、いずれも Any になります。標本とちょうど同じだけ曖昧です。Any は Scala では居心地が悪く、その居心地の悪さこそ狙いです。文書が何も語らなかった項目に印を付け、そうでないふりをしません。
標本が言えないこと
Option の項目はなく、既定値もなく、sealed trait もありません。文書ひとつが示すのは一つの形です。二つの荷が鍵一つ分だけ違うなら、それはあなたが設計する合併です。生成された型が役に立たなくなり、あなたの設計が始まる地点でもあります。
プライバシー
すべての処理はブラウザ内のJavaScriptだけで完結します。データがアップロードされることはないため、機密情報でも安心して利用でき、オフラインでも動作します。