2023/03/20 追記・編集
1年ほど前に書いたこちらの記事が想像以上に読まれているようでとても驚いています。 こちらで紹介していたコードはあまりKotlinらしい記法ではなかったため、情報の質として良くないと判断し コード部分の編集を行いました。
差分は以下リンクから参照することができます。
https://gist.github.com/rokuosan/3aa7fd1ff8c609361d72cc49d3a98f73/revisions
はじめに
Kotlinを使ってHTTPリクエストを送信し、レスポンスをJSONとして解析する方法を忘れないために書き残しておきます。
JSONの解析には外部ライブラリを用いますが、HTTP通信には標準ライブラリのみを使用します。
外部ライブラリなどを使用すれば、もっと簡潔に書けると思いますしそちらの方が機能面でも優れてるかと思います。 もしライブラリを使用する場合であれば、Fuelなどのライブラリを使用すれば良いでしょう。
ここに紹介するサンプルコードでは行数の少なさを優先したためnull安全が十分ではありません。 実際に利用する際はnullチェックなどを挟んでnull安全に利用してください。
HTTP通信を行う
KotlinでHTTP通信を行うにはHttpURLConnection
か、HttpsURLConnection
を使います。
今回では、HTTPを選択します。
KotlinでHttpURLConnection
を使って通信を行うには以下のように記述します。
|
|
requestMethod
に関してはデフォルトでGETなので変更する必要がない場合は記述する必要はありません。
文字列結合についてはjoinToString()
で行っています。この関数は引数に指定された文字列を利用してリストにある文字列をすべて結合してくれます。
デフォルトでは区切り文字としてカンマが渡されてしまうので、空の文字列を指定しておきます。
Kotlinの標準ライブラリにあるbuildString
を利用して文字列を結合しても問題ありません。
buildStringを利用した場合は以下のように書き換えることができます。
|
|
また、use{ /* 処理 */ }
と記述すると、Javaではcloseしていたものを自動でcloseしてくれます。非常に便利です。
JSONにする
JSONに変換するにあたって、JSON in Java1 というライブラリを用います。
KotlinにはKotlin Serializationと呼ばれる公式シリアライザが用意されていますが、準備の少なさからこちらを今回は利用します。
このライブラリを使用するためにはGradleを使用している場合であれば、以下のものを追記してください。
|
|
ライブラリを使用できるようになったところで、先ほどのプログラムに変更を加えます。
|
|
レスポンスのデータが{
で始まっている場合は、JSONObjectクラスを利用してください。
もし[
から始まっている場合はJSONArrayクラスを利用してください。
どちらにおいてもコンストラクタに変換したい文字列を渡せばあとはJSONデータとして扱うことができます。
あとは、自由にデータを取得したりすれば終わりです。
さいごに
KotlinでHTTP通信してレスポンスをJSONに変換するプログラムを作りました。
たまにHTTP通信の方法を忘れてしまうので、今度こそ忘れないようにしたいです。