【Android】階層形式のJSONデータをKotlinで受け取る方法
@yamaday0uです。
今回はAndroidアプリ開発関係で、階層形式のJSONデータを受け取る方法の一例をご紹介します。
スポンサーリンク
はじめに
以前、業務中に階層形式のJSONデータを扱う必要が出たのですが、JSONデータをアプリ内で使えるように読み取る方法が分からず苦戦しました。
同じように悩んでいる方の力になれればと思い、この記事を書くことにしました。
前提
対象読者
この記事は以下に該当する方に向けて作成しています。
Androidアプリ開発している方≒Kotlinを扱っている方
開発環境
エディタ | Android Studio |
使用言語 | Kotlin |
スポンサーリンク
使用技術
今回紹介する方法では、Googleが開発したGsonというライブラリしてJSONデータを読み取ります。
使用するJSONデータ
以下のJSONデータを使用します。簡単なプロフィール情報のJSONです。
“address”の中にさらにJSON形式でデータが入っています。
{
"name": "太郎",
"age": 27,
"address": {
"prefecture":"東京都",
"city":"千代田区",
"address line1":"飯田橋",
"address line2":"1-1-1"
}
}
スポンサーリンク
階層になっているJSONデータをAndroidアプリで読み取る
Gsonを使うためにアプリレベルのbuild.gradleファイルに以下の記述を追記します。
dependencies {
implementation 'com.google.code.gson:gson:2.9.0'
}
今回のポイント:データクラスの用意
Jsonデータを受け取るために以下のようにデータクラスを用意します。
package com.example.hierarchyjsonapp
import com.google.gson.annotations.SerializedName
data class Profile(
@SerializedName("name")
var name: String,
@SerializedName("age")
var age: Int,
@SerializedName("address")
var address: Address
)
data class Address(
@SerializedName("prefecture")
var prefecture: String,
@SerializedName("city")
var city: String,
@SerializedName("address_line1")
var addressLine1: String,
@SerializedName("address_line2")
var addressLine2: String
)
このファイルのポイントはProfileというデータクラスにAddress型の変数addressを定義していることです。
Address型はすぐ下のデータクラスAddressで定義していて、のちに紹介するJsonから特定のオブジェクトに変換する過程でAddress型のオブジェクトとして取り出せるようになります。
Activityの作成
Activityファイルを以下のように作成します。
package com.example.hierarchyjsonapp
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.TextView
import com.google.gson.Gson
class MainActivity : AppCompatActivity() {
private val jsonData= "{\"name\": \"太郎\",\"age\": 27,\"address\":{\"prefecture\":\"東京都\",\"city\":\"千代田区\",\"address_line1\":\"飯田橋\",\"address_line2\":\"1-1-1\"}}"
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
var profile = Gson().fromJson(jsonData, Profile::class.java)
findViewById<TextView>(R.id.name).text = "名前:"+profile.name
findViewById<TextView>(R.id.age).text = "年齢:"+profile.age.toString()
findViewById<TextView>(R.id.address).text = makeAddress(profile.address)
}
private fun makeAddress(address: Address): String {
return "住所:" + address.prefecture + address.city + address.addressLine1 + address.addressLine2
}
}
変数jsonDataにさきほど紹介したJsonデータを入れています。※紹介用にベタ書きしています。
GsonのfromJson()メソッドを使って変数JsonをデータクラスProfile型のオブジェクトに変換します。
addressに関する情報はAddress型のオブジェクトとして扱えるので、makeAddress()メソッドでaddress.prefectureのようにJsonデータから受け取った値を取り出せるようになります。
簡単ですが、階層形式のJsonデータをKotlinで受け取る方法をご紹介しました。
今回作ったアプリのソースコードはGitHubにアップしてあるので、必要に応じてcloneしてみてください。
トップ画像:raphaelsilvaによるPixabayからの画像
yamaday0uを応援お願いします!あなたの1クリックが励みになります。
>> にほんブログ村