JSONライブラリー、Moshiを使ってみた。
AndroidでJSONをパースするのに、AndroidのJSONライブラリを調べていた。
もっしー?、Moshi 、modern JSON library
生まれて一度もSquareのクレジット決済を利用したことはないけど
Androidのアプリ開発する際、オープンソースのライブラリで、よくお世話になってます。
今回見つけたライブラリも、Square製だった。
AndroidのJSON系ライブラリてGSON、Jacksonとか、強そうな名前が多い。
いつもの
compile 'com.squareup.moshi:moshi:1.0.0'
Moshiは、JSON形式のデータを読み込んで、JavaObjectに変換してくれる、モダンで軽量なライブラリ。
JSONファイル
{ "hidden_card": { "rank": "6", "suit": "SPADES" }, "visible_cards": [ { "rank": "4", "suit": "CLUBS" }, { "rank": "A", "suit": "HEARTS" } ] }
構造
hidden_card(単数) rank suit visible_cards(複数) rank suit rank suit
JSONの構造に合わせてクラスを作る。
class BlackjackHand { public final Card hidden_card; public final List<Card> visible_cards; ... } class Card { public final char rank; public final Suit suit; ... } enum Suit { CLUBS, DIAMONDS, HEARTS, SPADES; }
JSONを読み込んでJavaObjectに変換する。
String json = ...; Moshi moshi = new Moshi.Builder().build(); JsonAdapter<BlackjackHand> jsonAdapter = moshi.adapter(BlackjackHand.class); BlackjackHand blackjackHand = jsonAdapter.fromJson(json); System.out.println(blackjackHand);
個人(名前、年齢、仕事)
Json
String json_str = "" + "{\n" + " \"person\": {\n" + " \"name\": \"香川健二\",\n" + " \"age\": \"30\",\n" + " \"job\": \"エンジニア\"\n" + " }\n" + "}\n";
Personクラスを作る。
class Person { String name; String job; int age; Person(String name, String job, int age) { this.name = name; this.job = job; this.age = age; } }
Personクラスを保持するクラス。
public class JsonCreate { Person person; JsonCreate(Person person) { this.person = person; } }
JSONを読み込んで出力。
try { Moshi moshi = new Moshi.Builder().build(); JsonAdapter<JsonCreate> jsonAdapter = moshi.adapter(JsonCreate.class); JsonCreate json = jsonAdapter.fromJson(json_str); Log.d("デバッグ","" + "名前 : " + json.person.name + "\n" + "年齢 : " + json.person.age + "\n" + "仕事 : " + json.person.job ); } catch (IOException e) { Log.d("デバッグ",e.toString()); }
個人 ( 名前、年齢、仕事 ) + 会社 ( ( 名前、年齢、仕事 )... )
Json
String json_str = "" + "{\n" + " \"person\": {\n" + " \"name\": \"香川 健二\",\n" + " \"age\": \"30\",\n" + " \"job\": \"エンジニア\"\n" + " },\n" + " \"campany\": [\n" + " {\n" + " \"name\": \"田中 誠\",\n" + " \"age\": \"24\",\n" + " \"job\": \"デザイナ\"\n" + " },\n" + " {\n" + " \"name\": \"木村 忍\",\n" + " \"age\": \"34\",\n" + " \"job\": \"エンジニア\"\n" + " }\n" + " ]\n" + "}\n";
Personクラスを保持するクラス。
public class JsonCreate { Person person; List<Person> campany; JsonCreate(Person person, List<Person> campany) { this.person = person; this.campany = campany; } }
JSONを読み込んで出力。
try { Moshi moshi = new Moshi.Builder().build(); JsonAdapter<JsonCreate> jsonAdapter = moshi.adapter(JsonCreate.class); JsonCreate json = jsonAdapter.fromJson(json_str); Log.d("デバッグ","" + "名前 : " + json.person.name + "\n" + "年齢 : " + json.person.age + "\n" + "仕事 : " + json.person.job ); for(int i = 0; i < json.campany.size(); i++) { Log.d("デバッグ","" + "名前 : " + json.campany.get(i).name + "\n" + "年齢 : " + json.campany.get(i).age + "\n" + "仕事 : " + json.campany.get(i).job ); } } catch (IOException e) { Log.d("デバッグ",e.toString()); }