Androidで使えるJSON-Javaライブラリ

21,460 views

Published on

JSON日の金曜日#1での発表です
http://atnd.org/events/29927

Published in: Technology
0 Comments
22 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
21,460
On SlideShare
0
From Embeds
0
Number of Embeds
1,351
Actions
Shares
0
Downloads
43
Comments
0
Likes
22
Embeds 0
No embeds

No notes for slide

Androidで使えるJSON-Javaライブラリ

  1. 1. Androidで使えるJSON-Javaライブラリ JSON日の金曜日 1週目 2012/7/13(金)
  2. 2. aboutme.json{ "name":"Yukiya Nakagawa", "nick_name":"なかざん", "screen_name":"Nkzn", "org":[ { "name":"ウォーターセル株式会社", "activity":"農業支援システム「アグリノート」" }, { "name":"日本Androidの会 新潟支部", "activity":"さいきんなにもやってない(´・ω・`)" } ]}
  3. 3. スマホと鯖とJavaScriptの美味しい関係なぜJSON×Androidなのか?
  4. 4. 鯖と端末の関係
  5. 5. 鯖と端末の関係 鯖だと思いねえ データのやり取り
  6. 6. 「データ」• HTTP通信でやり取りできるものの例 – XML • Java系フレームワークの伝統と信頼 • Android向けの標準ライブラリでも豊富にサポート • Content-Type: application/xml – 平文 • 構造化とかどうでもいいとき • Content-Type: text/plain – JSON • マルチプラットフォーム展開の強い味方 • Content-Type: application/json
  7. 7. マルチプラットフォーム展開 鯖だと思いねえ Webアプリスマートフォン タブレット
  8. 8. WebアプリといえばJavaScript
  9. 9. マルチプラットフォーム展開 鯖だと思いねえ XML JSON クライアントでの 受け取りが楽! Webアプリスマートフォン タブレット
  10. 10. マルチプラットフォーム展開 鯖だと思いねえ XML JSON 2種類用意するの、 無駄じゃね? Webアプリスマートフォン タブレット
  11. 11. マルチプラットフォーム展開 鯖だと思いねえJSON ゚i ・。i*i゜・。oi ・。i 。*。|o___・|゚o| JSON XML ・+o。゚/_ノヽ_\゚*・ JSON ゚i・。/(≡) (≡)\゚+ 。|゚//// (_人_) //∧゚ *| |┬| | ・i。\_ `ーU _/。 ゚*/ \| ノ \・o ゚i||  ̄ ̄ ⌒ヽ o|| / | ・i ソヽ_人 /人 | ゚。/ /  ̄ ̄ / | | Webアプリ / / || |\∧MMM∧/| <J S O N 状 態!> |/VWWWV\|スマートフォン タブレット
  12. 12. Parse & SerializeJSON-Javaライブラリの役割
  13. 13. JSON-Javaライブラリの役割• 最低限:JSONデータが読めること• JSON文字列とJavaオブジェクト(POJO) の相互変換 – Java → JSON:シリアライズ – JSON → Java:パース(デシリアライズ)
  14. 14. POJOとの相互変換AboutMe.java aboutme.json { public class AboutMe { "name":"Yukiya Nakagawa”, String name; "nick_name":"なかざん", String nickName; "screen_name":"Nkzn", String screenName; パース "orgs":[ List<Org> orgs; { // getter-setter "name":"ウォーターセル株式会社", "activity":"農業支援システム「アグリノート」” class Org { }, String name; シリアライズ { String activity; "name":"日本Androidの会 新潟支部", // getter-setter "activity":"さいきんなにもやってない(´・ω・`)” } } } ] }
  15. 15. POJO• Plain Old Java Object – 「昔ながらの素朴なJavaオブジェクト」 – POJO自体には命名規則はない – POJOの一種であるJavaBeansの規約/命名規 則が流用される • publicな引数なしコンストラクタ • いくつかのインスタンス変数 • 上記に対応するgetter/setter – JavaBeansよりはゆるふわ
  16. 16. できるだけ頑張らない方向のAndroidで使えるJSONライブラリ
  17. 17. Androidで使えるJSONライブラリ• 選定基準 – 依存ライブラリがほぼないこと • 外部jarが増えるとMaven使いたくなる • MavenとAndroidは相性悪め – 使い方が分かりやすいこと • 独断と偏見 – Androidに存在しないJavaAPIを使っていない こと • JavaVMじゃなくてDalvikVMだからね! • 基本的に気にしなくても問題ない
  18. 18. Androidで使えるJSONライブラリ• org.json – Android SDK標準搭載のJSONパーサー• JSONIC (ver 1.2.11) – http://jsonic.sourceforge.jp/ – JSP連携とか強いらしい• google-gson (ver 2.2.2) – http://code.google.com/p/google-gson/ – グーメン• JsonPullParser (ver 1.4.11) – https://github.com/vvakame/JsonPullParser – APTを利用する移植作 – 軽量
  19. 19. AndroidSDKにも付いてるorg.json
  20. 20. パース
  21. 21. パース
  22. 22. パース
  23. 23. シリアライズ
  24. 24. 感想1. めんどい2. めんどい3. POJO関係ねえ4. めんどい
  25. 25. いたれりつくせりJSONIC
  26. 26. JSONIC• 特徴 – POJO⇔JSON変換 – 対応している型の数がなんかすごい – JavaScriptに親和的な出力 • JSP内でJS用にJSONを出力する場合とか • エスケープかけてくれたり – XML→JSON変換 • (org.w3c.dom.Document/Elementを経由)
  27. 27. パース
  28. 28. シリアライズ
  29. 29. 感想1. jar1個にパス通したら使えた便利2. 基本的に1行でなんとかなる便3. JSONObjectとは一体なんだったのか
  30. 30. 信仰が貴方の力となる ―― グーメンgoogle-gson
  31. 31. google-gson• 特徴 – POJO⇔JSON変換 – 字句解析機能も備えているため org.json.JSONObjectのような真似も可能 – 速さにムラがあるらしい(後述)
  32. 32. パース
  33. 33. シリアライズ
  34. 34. 感想1. JSONIC触った後だと「シリアライズ時 の型くらい自分で分かれよ」と思わなく もない2. jar1個にパス通すだけでいいのはやはり 楽
  35. 35. すごいぞぼくらのJPP!JsonPullParser 作者@vvakame(ジェイソン仕様)
  36. 36. 特徴• APT(Annotation Processing Tool)を利用して いる – アノテーションに応じてクラスの自動生成とか出 来る – 詳しくはこのへん • http://www.slideshare.net/vvakame/apt-7568357• 各POJOに応じたJSONパーサーを自動生成• 軽量 – JSONIC 208KB – gson: 184KB – JPP: 45KB
  37. 37. パース
  38. 38. シリアライズ
  39. 39. 感想1. いつもアグリノート内でお世話になってい ます2. 正直アノテーション付けるの面倒臭いとき ある – でもお陰で型安全になってる部分ある3. 割と作るのが簡単なTokenConverterを実装 すればJavaの型に1対1対応できない値が 来ても大丈夫! – 文字列値が来るか配列が来るか分からないキー のための「String2ListConverter」作りました。
  40. 40. ぶっちゃけた話総括
  41. 41. ぶっちゃけorg.jsonのやつ以外は 好みじゃね?
  42. 42. 使い分け• 1 Entry per Day: Androidアプリで使える JSONライブラリ比較 – http://mstssk.blogspot.jp/2011/12/androidjson. html – ぶっちゃけ今回の発表はここの記事参考にし ただけです。 – 色んなパフォーマンス計測結果が出てます。 – 次ページで特徴に合わせた使い分けをば。
  43. 43. それぞれの特徴• JSONIC – ゆるふわな使い勝手と引換にファイルも動作 も重い• google-gson – パースは超速いけどシリアライズは遅い• JsonPullParser – 専用クラスを生成した恩恵で安定のスピード
  44. 44. それぞれの特徴からみた使い道• JSONIC – とにかくすぐ使いたい&そこまで速度は求め てないとき• google-gson – パースしかする予定がないとき• JsonPullParser – 本体を重くしたくない時
  45. 45. ProguardAndroid特有の悩み
  46. 46. セキュリティ問題• Androidのリバースエンジニアリング手法 は既に確立している• そのままリリースするとJavaファイルま で丸見え• ソースコード難読化という足止めが必要• 標準難読化ツール「Proguard」との相性 は重要となる
  47. 47. Proguardとの相性• JPP以外は基本的にアウト – 変数名とJSON内のキーの対応が重要 – 難読化すると変数名が変わってしまう • 逆にPOJOを難読化しなければ行ける – JPPはPOJO専用クラスを生成して、難読化 前に内部でキー名と変数の対応が出来上がっ ているため、難読化の影響を受けない 難読化に強いのはJPP!
  48. 48. Stealth Marketing結論
  49. 49. みんなJPPつかおうぜ って言えって言われました

×