このツールの動作
JSON の標本が Kotlin の data class になります。オブジェクト一つにつき一つです。
{ "id": 1, "firstName": "Ada", "address": { "city": "Paris" } }
data class Root(
val id: Long,
val firstName: String,
val address: Address,
)
data class Address(
val city: String,
)
どのプロパティも val です。復号された荷は値だからです。data class には equals、hashCode、toString、そして copy() が付いてきます。最後のものが、何も書き換えずに一つの項目を変える方法です。
鍵は鍵のまま
Kotlin の識別子はバッククォートで囲めます。それだけで、JSON の鍵をそのまま保てます。
data class Root(
val `content-type`: String,
val `class`: Long,
val `2fa`: Boolean,
)
class は予約語、content-type にはハイフン、2fa は数字始まり——バッククォートの中ではどれも関係ありません。kotlinx.serialization ではプロパティ名が JSON 名なので、注釈なしでこのまま復号できます。
Jackson や Moshi も探すのはプロパティ名なので、バッククォートの名前はそちらでも働きます。contentType のようにプロパティを改名すると決めたときだけ、鍵を指し直すために @JsonProperty("content-type") や @Json(name = "content-type") が要ります。
型と、そこに無い ?
- 整数は
Long、小数はDoubleになります。JSON の数値が問題なく運べる型です。 nullと型の分からない値はAny?になります。疑問符が現れる唯一の場所であり、標本がそれを見せた唯一の場所でもあります。- 空の配列や型の混ざった配列は
List<Any>になります。
ほかに null を許すものはなく、既定値もありません。ときどき無い項目は、あなたが付ける ? と = null です。二つ目の荷が、この荷には言えなかったことを教えてくれてからで結構です。
鍵が二つなら、プロパティも二つ
プロパティ名としてぶつかる二つの鍵は、混ぜずに分けます。二つ目に番号付きの接尾辞が付きます。バッククォートの名前が JSON 名そのものなので、ここで衝突が起きるのは稀です。繕いが避けられないときだけです。
プライバシー
すべての処理はブラウザ内のJavaScriptだけで完結します。データがアップロードされることはないため、機密情報でも安心して利用でき、オフラインでも動作します。