[AndroidStudio]jsonライブラリのgsonを導入・jsonデータからModelデータへ変換まで
はじめに
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についてはこちらでは省略します
その他おすすめの備忘録
- [Android]CollapsingToolbarLayoutで影グラデーションが表示しない不具合対応
- [Java]JavaでC#のFuncデリゲートを再現
- [Android]Androidのギャラリー・カメラからの画像パスが変わった?取得方法の変更まで。
- [FuelPHP]DB::queryの戻り値をModel型で返す方法
- [AI]イラストレータCS6で入稿データを作成する方法
- [FuelPHP]独自オリジナル認証ドライバをsimpleauthを参考に実装する2
- [Android]5.0Lollipopで追加されたToolbarでカスタム実装(戻るボタン・検索ボタンを追加)するところまで
- [Android]AsyncTaskの非同期処理を制御(終了をコールバック)してくれるCountDownLatchクラスについて
- [zsh]「httpbin.org」にcurlでHTTPリクエスト情報(グローバルIPなど)の確認やPOST/GET送信のテストなどする
- [AndroidStudio]便利な共通部品ライブラリのApacheCommonsLangを導入
coffee-break
Don't write code that useless.
1日5杯はコーヒー、カフェオレ飲みます。狭心症のため安静にします☆松本 雄貴
Kotlinでサービスリリース目指す!
iOSでチャットアプリ作成中。自然言語解析LSIを習得中
Mac / Android・iOS / Rails / Oracle
2017年 Lpic L2取得
2012年 Android技術者資格取得
2010年 OracleMasterGold10g取得
2008年 CCNAQiitaもたまに投稿
https://qiita.com/y-matsumoto東京近郊で常駐開発探してる方はこちらよりご連絡ください
SES企業でパートナー会社を探している企業様はこちらよりご連絡ください
スプリットカメラ iOS / Android
音声認識で聞いた日付から曜日当てアプリ Android
ソーシャルタイマー Android
カテゴリー
- ActiveRecord (2)
- Android (52)
- AndroidStudio (10)
- Ansible (1)
- AWS (1)
- Bash (18)
- Blog (7)
- BootStrap (1)
- CentOS (16)
- Chef (1)
- css (2)
- Eclipse (5)
- error (1)
- Facebook (2)
- Firebase (1)
- FuelPHP (16)
- Git (22)
- GitHub (3)
- Gradle (2)
- GraphAPI (1)
- Grunt (1)
- heroku (2)
- illustrator (1)
- iOS (17)
- Java (4)
- Jenkins (1)
- jQuery (3)
- Kotlin (2)
- Mac (22)
- nginx (1)
- Node.js (3)
- peco (1)
- php (5)
- Python (1)
- Rails (16)
- Ruby (11)
- shell (1)
- SNS (1)
- Swift (2)
- tmux (2)
- Vagrant (6)
- Vim (6)
- windows (2)
- WordPress (3)
- zsh (4)
- フリーランス (1)
- ライブラリ (1)
- 勉強会 (2)
- 宣伝 (1)
- 未分類 (2)
最近の投稿
- [MAC]HighSierraでgitプッシュエラー「Unable to negotiate with xxx.xxx.xxx.xxx port xx: no matching cipher found. Their offer: aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,arcfour,aes192-cbc,aes256-cbc,rijndael-cbc@lysator.liu.se fatal: Could not read from remote repository.」
- [iOS]iOS11からFacebook,Twitter連携(シェアなど)廃止の対応方法
- [iOS]速報2017AppleSpecialEventのiOS11、iPhone8など発表内容について
- [iOS][Firebase]The default Firebase app has not yet been configured. Add `[FIRApp configure];
- [iOS]2017年9月リリースのiOS11で開発者が対応するべきこと
- 今人気の現金化サービスCASH(キャッシュ)を使ったレビュー
- [Pandoc][Mac]pandocでmarkdownからwordファイル作成
- [Android]映画サマーウォーズの聞いた日付(誕生日)から曜日当てをアプリ音声認識で簡単に実現
- [Android]起動しているActivityを取得するadb shell コマンド
- [Android][Kotlin]kotlin学習で参考になるサイト一覧
2023年12月 月 火 水 木 金 土 日 « 5月 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 アーカイブ
- 2018年5月
- 2017年9月
- 2017年8月
- 2017年7月
- 2017年6月
- 2017年5月
- 2017年2月
- 2017年1月
- 2016年12月
- 2016年7月
- 2016年6月
- 2016年1月
- 2015年12月
- 2015年11月
- 2015年10月
- 2015年9月
- 2015年8月
- 2015年7月
- 2015年6月
- 2015年5月
- 2015年4月
- 2015年3月
- 2015年2月
- 2015年1月
- 2014年12月
- 2014年11月
- 2014年6月
- 2014年5月
- 2014年4月
- 2014年3月
- 2014年2月
- 2014年1月
- 2013年12月
- 2013年11月
- 2013年9月
- 2013年8月
- 2013年7月
- 2013年6月
- 2013年5月
- 2013年4月
- 2013年3月
- 2013年2月
- 2013年1月
- 2012年12月
- 2012年10月
- 2012年5月
- 2010年6月
エントリ