このツールの動作
JSON の標本が Java のレコードになります。オブジェクト一つにつき一つです。
{ "id": 1, "firstName": "Ada", "address": { "city": "Paris" } }
public record Root(
Long id,
String firstName,
Address address
) {}
public record Address(
String city
) {}
レコードは、現代の Java で「データだけ」を表す最も短い書き方です。構築子、取得子、equals、hashCode、toString が付いてきます。Java 16 以降が要ります。
鍵は改名を生き延びる
部品名は Java の規則に従います。ハイフンは使えず、数字では始められず、予約語も使えません。content-type は contentType、class は class_、2fa は f2fa になります。名前を変えるたび、元の鍵が一緒について行きます。
import com.fasterxml.jackson.annotation.JsonProperty;
public record Root(
@JsonProperty("content-type") String contentType,
@JsonProperty("class") Long class_,
Boolean ok
) {}
この注釈が無ければ、Jackson は contentType を探して何も見つけません。レコードは、自分が生まれた文書を読めなくなります。この文章を書くまで注釈は付いていませんでした。欠陥は直り、注釈は名前が実際に変わったところにだけ、取り込みとともに現れます。
箱型を使う理由
数値は Long か Double、真偽値は Boolean です。JSON には null があり、Java の基本型にはありません。null を受け取った double は 0.0 になります。本物の零と区別がつかない値です。箱型なら null を表せます。形式が許しているのはそちらです。
同じ理由で、null と型の分からない値は Object に、その配列は List<Object> になります。
標本が言えないこと
省略可能なものはなく、@Nullable も付きません。どの部品も、文書がそれを持っていたからそこにあります。レコードは表層では不変なので、後から「無いこともある」と決めた項目は、旗ではなく形の変更になります。
根が数値や文字列——42、"テキスト"——のときは拒みます。Java に型別名は無く、名前を付けるものが無いからです。オブジェクトの JSON 配列からは、その要素のレコードが得られます。実際に List<Root> に結びつけるのは、その形です。
プライバシー
すべての処理はブラウザ内のJavaScriptだけで完結します。データがアップロードされることはないため、機密情報でも安心して利用でき、オフラインでも動作します。