kotlinx.serializationは書いて字の通りserialize/deserializeライブラリで、Multiplatformサポートと、フォーマットとしてJSON、CBOR、Protobufをサポートしています。バージョンが0系ということでinterfaceに変更が入る可能性はあるけど、まあ使わなければなんとやら。
annotation processorを用いたSerializer/Deserializer生成機能は多くのJSON ライブラリに含まれており、kotlinx.serializationでもGradle Pluginとして提供されています。便利ですが如何せんでかい。小さなライブラリで僅か1, 2個程度のdata classのSerializer/Deserializer生成をやるのは規模に見合っておらず、 org.json
や GSON にあるようなJsonObject/JsonArrayで済ませたいケースもあるでしょう。
0.9.1 以前の場合、 kotlinx-serialization-runtime-common
には JSON builderとJsonTreeParser#parseが含まれています。JsonArrayな文字列を JsonTreeParser#parse
する事ができない制約があうものの、これらを使ってある程度JsonObject/JsonArrayと同等の事ができます。runtimeだけ使う場合はannotation processorも未使用なので、 kotlinx-serialization
Gradle Pluginの追加は不要で、runtimeの依存関係だけ解決すれば良いです。
0.10.0-eap-1からは JsonTreeParser#parse
は非推奨になっており、代わりに Json#parseJson
を使用します。こちらではJsonArrayな文字列が取り扱えない問題も解決しています。尚、eapではKotlin version 1.3.20-eap-xxを使用しているので、 kotlin-stdlib
の依存解決をお忘れなきよう。
最初この存在を知らずJSONパーサを書き始めてしまって、ふと我に返りソースを読み始めたらありました。そりゃそうだよね。BSON、Protobufも使わないときは使わないので、さらにminimumなruntimeにしたくなったら独立したライブラリを作るかもしれない。
余談ですが、Pure Kotlin を謳っているライブラリ群はMultiplatform時代ではいくら全部Kotlinで書かれていようがJava API使ったらもうpureとは言い難い(jvm moduleにすべき)ですね。大変な時代だ。