はじめに

Googleが開発しているjsonライブラリのgsonをAndroidStudioへ導入します。
javaでjsonのパーサーなどでよく使われています。

gsonについて

gsonを導入することで、jsonデータをjsonObjectへ変換(逆も可能)することができます。
また、jsonデータをそのままModelデータへすることも可能です。

gsonライブラリはMavenリポジトリにあります
現在バージョンは2.3.1になってます。

Mavenリポジトリ:
http://mvnrepository.com/artifact/com.google.code.gson/gson

プロジェクトへgsonの取り込み

プロジェクトのapp/build.gradle(AndroidStudioではGradleScriptでModule: appのbuild.gradle)へ以下を追加します

dependencies {
compile ‘com.google.code.gson:gson:2.3.1′
}

※dependenciesはプロジェクト新規で存在しているため、compile構文を一行追加でOKです

Mavenリポジトリをダウンロードして参照するためプロジェクト内へjarを配置などは不要です。

ここまでで取り込み完了です

gsonのライブラリを使ってみる

jsonデータをModelへ変換を行ってみます。

jsonデータは以下とします

{
    "args": {}, 
    "data": "", 
    "files": {}, 
    "form": {}, 
    "headers": {
        "Accept-Encoding": "gzip", 
        "Content-Length": "0", 
        "Content-Type": "application/x-www-form-urlencoded", 
        "Host": "httpbin.org", 
        "User-Agent": "Dalvik/1.6.0 (Linux; U; Android 4.1.1; HTL21 Build/JRO03C)"
    }, 
    "json": null, 
    "origin": "123.456.789.123", 
    "url": "http://httpbin.org/post"
}

Modelを作る

まずはjsonデータをModelに変換するためのModelを作成します

import com.google.gson.annotations.SerializedName;

public class TestModel {

    // 変数宣言

    @SerializedName("data")
    private String data;

    @SerializedName("origin")
    private String origin;

    @SerializedName("url")
    private String url;

    @SerializedName("headers")
    private Header headers;

    // getter/setter

    public String getData() {
        return data;
    }

    public void setData(String data) {
        this.data = data;
    }

    public String getOrigin() {
        return origin;
    }

    public void setOrigin(String origin) {
        this.origin = origin;
    }

    public String getUrl() {
        return url;
    }

    public void setUrl(String url) {
        this.url = url;
    }

    public Header getHeaders() {
        return headers;
    }

    public void setHeaders(Header headers) {
        this.headers = headers;
    }

    /**
     * heddarクラス
     */
    class Header{

        // 変数宣言

        @SerializedName("Accept-Encoding")
        private String acceptEncoding;

        @SerializedName("Content-Length")
        private Integer contentLength;

        @SerializedName("Content-Type")
        private String contentType;

        @SerializedName("Host")
        private String host;

        @SerializedName("User-Agent")
        private String userAgent;

        // getter/setter

        public String getAcceptEncoding() {
            return acceptEncoding;
        }

        public void setAcceptEncoding(String acceptEncoding) {
            this.acceptEncoding = acceptEncoding;
        }

        public Integer getContentLength() {
            return contentLength;
        }

        public void setContentLength(Integer contentLength) {
            this.contentLength = contentLength;
        }

        public String getContentType() {
            return contentType;
        }

        public void setContentType(String contentType) {
            this.contentType = contentType;
        }

        public String getHost() {
            return host;
        }

        public void setHost(String host) {
            this.host = host;
        }

        public String getUserAgent() {
            return userAgent;
        }

        public void setUserAgent(String userAgent) {
            this.userAgent = userAgent;
        }
    }
}

アノテーションで指定している@SerializedNameは実際のjsonのkeyと紐付けて別の名前の変数へ代入ができます。
アノテーションを指定しない場合は、jsonのkey名と完全一致の変数名としなければいけません。
上記サンプルでは作法として全ての変数名に指定しておきます。
作法として入れてますがgetter/setterは特に用意しなくてもgson自体は動作します。その場合は変数はpublicにしてアクセスしてください。

jsonデータをModelへ変換する

では上記で作成したModelへjsonデータを入れてみます

gsonをインポートします

import com.google.gson.Gson;

Modelへjsonデータを入れます

Gson gson = new Gson();
TestModel model = gson.fromJson(response.toString(),TestModel.class);

※response変数にjsonデータを入れています

ここまででModelへjsonデータを入れることができました。とてもシンプルに簡単にできて便利です。

実際にサーバのデータを取得してgsonでパースする想定ですので、サーバデータを取得したらresponse変数へ代入して使ってください。
Androidの場合は通信ライブラリとしてgsonと同じくGoogleが開発しているvolleyがメジャーです。※volleyについてはこちらでは省略します

その他おすすめの備忘録

Tagged with:
 

コメントを残す