Kotlin

【Kotlin入門】クラスオブジェクトをJSONに変換する

Kotlin を触ってもうすぐ 3 週間が経過します。

Spring Boot との兼ね合いもあるけど何か新しいことをするたびにハマりますね・・・。

今回はクラスオブジェクトを JSON に変換する方法を紹介したいと思います。

ライブラリ別の使用方法

JSON への変換だったら、PHP なら json_encode() 一発じゃんって思っちゃうのですが、Kotlin や Java ではそうはいきません。

シェルだって jq コマンドを利用すればサクサクっとパースできなくもないですよね。

しかし、Kotlin の場合はライブラリを利用しないといけない。

そして、ライブラリの候補ラインナップも当然のように複数登場します。

GSON

まずは、根強い人気を誇ってきた Google の GSON。

利用者が多い分、情報も豊富にありパフォーマンス面でも悪くないと言われています。

残念ながら使ったことはないので特にコメントすることはありません。

gson インスタンスの toJson() と fromJson() でシリアライズとデシリアライズが可能。

Moshi(Kotshi)

Java の JSON 変換ライブラリを Kotlin 拡張した Kotshi がこれからのトレンドになりそうな気配。

特に Android 界隈では利用者が多いようです。

data class に @JsonSerializable のアノテーションを定義して、そこからさらに・・・。

う~ん、ちまちまとクラスファイルを増やしたくないです。

Jackson

たまたま build.gradle に以下の定義があったので、もう Jackson でいいやという感じで採用。

詳しい説明は GitHub(kotlinの方)を見てもらうのがいいかと思います。

わざわざマッパーオブジェクトを作らないといけないので一手間ありますが、使い方はシンプルです。

今回は JSON の文字列が欲しかったので、data class を単純に変換します。

data class 側で null の値は除外する場合は以下のアノテーションを定義します。

ちょいちょい端折っているのでこのままだと動かないですが、イメージとしてはこんな感じです。

まとめ

JSON の変換ライブラリは自分の好みのものや、携わるプロジェクトに沿って選定すればいいと思います。

PHP が好きだった身としては面倒に感じることしかないですが、このあたりは慣れるしかないですね。

特にアノテーションのクラスをわざわざ作る手法はあまり好みではありません。

Spring Boot の相関バリデーション作るのも手間だったし時間が無駄にかかる。

といった愚痴は時間が解決してくれることを期待します。