yamaday0u Blog Written by yamaday0u

【Android】階層形式のJSONデータをKotlinで受け取る方法

Android

@yamaday0uです。

今回はAndroidアプリ開発関係で、階層形式のJSONデータを受け取る方法の一例をご紹介します。

スポンサーリンク

はじめに

以前、業務中に階層形式のJSONデータを扱う必要が出たのですが、JSONデータをアプリ内で使えるように読み取る方法が分からず苦戦しました。

同じように悩んでいる方の力になれればと思い、この記事を書くことにしました。

前提

対象読者

この記事は以下に該当する方に向けて作成しています。

Androidアプリ開発している方≒Kotlinを扱っている方

開発環境

エディタAndroid Studio
使用言語Kotlin

スポンサーリンク

使用技術

今回紹介する方法では、Googleが開発したGsonというライブラリしてJSONデータを読み取ります。

Gson

使用する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クリックが励みになります。
>> にほんブログ村