【続】Jsonマッパー 「jsonpullparser」つかってみた!
昨日の続きです。
使用するテストデータはこちら
そしてこれに対するパーサークラスが下記2つです。
PostMessageList
@JsonModel(decamelize=false) public class PostMessageList { @JsonKey public List<TestJsonParse> postlist; public List<TestJsonParse> getPostlist() { return postlist; } public void setPostlist(List<TestJsonParse> postlist) { this.postlist = postlist; } }
TestJsonParse
@JsonModel(decamelize=false) public class TestJsonParse { @JsonKey public String id_postmessage; @JsonKey public String id_sender; public String getId_postmessage() { return id_postmessage; } public void setId_postmessage(String id_postmessage) { this.id_postmessage = id_postmessage; } public String getId_sender() { return id_sender; } public void setId_sender(String id_sender) { this.id_sender = id_sender; } }
上記のクラスを定義して、
テストデータのInputStreamを生成できたら、下記のようにして読み込めばパース完了です。
JsonPullParser parser = JsonPullParser.newParser(in); PostMessageList json = PostMessageListGen.get(parser); Log.d("test",json.postlist.get(2).id_sender);
こんな感じでパースした内容を参照できます。
JsonPullParserはProGuardの難読化にも対応できるそうで、その点でも使いたいなーと思ってます。
難読化が出来る/出来ないについて、どういうことなのかよくわかってないので、
次回は難読化について調べてみます。
Jsonマッパー 「jsonpullparser」つかってみた!
以前に仕事のプロジェクトでJsonライブラリを使っていたことがある(※たしかjacksonだった)のですが、正直に言うと「マッパー?何それ?」ってくらいの認識で、メンバーの方が選定用意してくれたものをただ使ってるだけでした。
自作アプリ開発でも同じく楽をしようと思い、必要に駆られて何使おうか調べた結果、軽い早いのバランスでjsonpullparserを使っていこうと好みで選びました。
で、つい1週間程前に、後輩君が「JSON使ったことが無い!仕事で使うらしいんですけど助けて~!」って言ってたので、この機会に社内採用技術としてjsonpullparserを押してしまおうと企んでます。
使い方は上のリンクでも書かれてますが、coreとaptのJAR2つをプロジェクトに設定し、パーサークラスを用意・設定すればOK。
core.jarはAndroidプロジェクトのlibフォルダに配置するだけ。
apt.jarは、注釈処理設定と外部jarとしてパスを通して使います。
まずはjarの指定方法。
eclipseのメニュから「プロジェクト→プロパティ→Javaコンパイラー→注釈処理→ファクトリー・パス」に進んで、外部jarの追加からapt.jarを指定すればOK。
次にjar指定の途中にあった【注釈処理】で必要な設定をします。
【注釈処理】の設定画面にあるプロセッサー・オプションにKey・Valueを設定します。
設定するキーは2つ
・JsonPullParserClassPostfix パーサークラスから自動生成するクラスにつける文字列
・JsonPullParserDebug デバッグ出力の有無
JsonPullParserClassPostfixにはGenとか入れておけばいいです。
例えばパーサークラス「jjjson.java」があったとして、ビルド時に「jjjsonGen.java」という感じでクラス名の末尾にくっついてきます。
この【自動生成クラスの生成場所】は後で設定します。
JsonPullParserDebugは、名前にもあるようにデバッグ出力の有無ってことなので、必要に応じてtrue/falseで設定しましょう。
最後に【自動生成クラスの生成場所】の設定です。
Key・Value設定の真上に「生成されるソース・ディレクトリー」という項目があるので、ここに適当にパスを通せばいいです。
よくある設定はgenの直下に生成ってのが一般的っぽいので、./genとかしておくといいと思います。
テスト用のコードとデータは後日追加します。
【2016/03/12 追記】
AndroidStudioでは、簡単に導入ができます。
利点としては次の通りです。
- JARファイルの設置不要
- 【注釈処理】の設定不要(たぶん勝手にやってくれてるのかな)
- 【自動生成クラスの生成場所】もgradleファイルに記述できる
次は肝心の設定方法。
プロジェクトとアプリのgradleに、apt処理のライブラリを追加する。
プロジェクトのgradle dependencies { classpath 'com.android.tools.build:gradle:1.5.0' classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8' ←この部分に、お好みのapt処理してくれるものを追加する } アプリのgradle apply plugin: 'com.neenbedankt.android-apt'
アプリgradleに、vvakameさんのjsonpullparserを利用するための記述を追加する。
アプリのgradleの適所に追記する android { compileOptions { encoding = "UTF-8" sourceCompatibility JavaVersion.VERSION_1_7 targetCompatibility JavaVersion.VERSION_1_7 } sourceSets { main { java.srcDirs = ['src/main/java', 'src-gen/main/java'] //←クラス出力先 } } } ext.jppVersion = '1.6.+'; configurations { apt } dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) compile "net.vvakame:jsonpullparser-core:${jppVersion}" //←追加 apt "net.vvakame:jsonpullparser-apt:${jppVersion}" //←追加 }
gradleに設定するだけで、サクッと使えるようになります。Ecripse環境と比べるとすんごい楽です。
ビルドすると'src-gen/main/java'のパスに、自動生成のクラスが出力されるようになるかと。
便利なクラスを作ってくれたvvakameさんに感謝です!
開発ブログを書いてみる
と言うことで、これから細々と書いていってみます。
プライベート開発と平行なので、開発が進めば何か書くと思われ。
アプリについては触れませんが、実装した機能やハマリ所を恥らいつつも書き溜めていきます。
これも後進育成のため・・・。