Mais conteúdo relacionado
Semelhante a Androidで使えるJSON-Javaライブラリ (20)
Mais de Yukiya Nakagawa (20)
Androidで使えるJSON-Javaライブラリ
- 2. aboutme.json
{
"name":"Yukiya Nakagawa",
"nick_name":"なかざん",
"screen_name":"Nkzn",
"org":[
{
"name":"ウォーターセル株式会社",
"activity":"農業支援システム「アグリノート」"
},
{
"name":"日本Androidの会 新潟支部",
"activity":"さいきんなにもやってない(´・ω・`)"
}
]
}
- 6. 「データ」
• HTTP通信でやり取りできるものの例
– XML
• Java系フレームワークの伝統と信頼
• Android向けの標準ライブラリでも豊富にサポート
• Content-Type: application/xml
– 平文
• 構造化とかどうでもいいとき
• Content-Type: text/plain
– JSON
• マルチプラットフォーム展開の強い味方
• Content-Type: application/json
- 9. マルチプラットフォーム展開
鯖だと思いねえ
XML JSON
クライアントでの
受け取りが楽!
Webアプリ
スマートフォン
タブレット
- 10. マルチプラットフォーム展開
鯖だと思いねえ
XML JSON
2種類用意するの、
無駄じゃね? Webアプリ
スマートフォン
タブレット
- 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\|
スマートフォン
タブレット
- 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. POJO
• Plain Old Java Object
– 「昔ながらの素朴なJavaオブジェクト」
– POJO自体には命名規則はない
– POJOの一種であるJavaBeansの規約/命名規
則が流用される
• publicな引数なしコンストラクタ
• いくつかのインスタンス変数
• 上記に対応するgetter/setter
– JavaBeansよりはゆるふわ
- 17. Androidで使えるJSONライブラリ
• 選定基準
– 依存ライブラリがほぼないこと
• 外部jarが増えるとMaven使いたくなる
• MavenとAndroidは相性悪め
– 使い方が分かりやすいこと
• 独断と偏見
– Androidに存在しないJavaAPIを使っていない
こと
• JavaVMじゃなくてDalvikVMだからね!
• 基本的に気にしなくても問題ない
- 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を利用する移植作
– 軽量
- 24. 感想
1. めんどい
2. めんどい
3. POJO関係ねえ
4. めんどい
- 26. JSONIC
• 特徴
– POJO⇔JSON変換
– 対応している型の数がなんかすごい
– JavaScriptに親和的な出力
• JSP内でJS用にJSONを出力する場合とか
• エスケープかけてくれたり
– XML→JSON変換
• (org.w3c.dom.Document/Elementを経由)
- 31. google-gson
• 特徴
– POJO⇔JSON変換
– 字句解析機能も備えているため
org.json.JSONObjectのような真似も可能
– 速さにムラがあるらしい(後述)
- 36. 特徴
• APT(Annotation Processing Tool)を利用して
いる
– アノテーションに応じてクラスの自動生成とか出
来る
– 詳しくはこのへん
• http://www.slideshare.net/vvakame/apt-7568357
• 各POJOに応じたJSONパーサーを自動生成
• 軽量
– JSONIC 208KB
– gson: 184KB
– JPP: 45KB
- 39. 感想
1. いつもアグリノート内でお世話になってい
ます
2. 正直アノテーション付けるの面倒臭いとき
ある
– でもお陰で型安全になってる部分ある
3. 割と作るのが簡単なTokenConverterを実装
すればJavaの型に1対1対応できない値が
来ても大丈夫!
– 文字列値が来るか配列が来るか分からないキー
のための「String2ListConverter」作りました。
- 42. 使い分け
• 1 Entry per Day: Androidアプリで使える
JSONライブラリ比較
– http://mstssk.blogspot.jp/2011/12/androidjson.
html
– ぶっちゃけ今回の発表はここの記事参考にし
ただけです。
– 色んなパフォーマンス計測結果が出てます。
– 次ページで特徴に合わせた使い分けをば。
- 43. それぞれの特徴
• JSONIC
– ゆるふわな使い勝手と引換にファイルも動作
も重い
• google-gson
– パースは超速いけどシリアライズは遅い
• JsonPullParser
– 専用クラスを生成した恩恵で安定のスピード
- 44. それぞれの特徴からみた使い道
• JSONIC
– とにかくすぐ使いたい&そこまで速度は求め
てないとき
• google-gson
– パースしかする予定がないとき
• JsonPullParser
– 本体を重くしたくない時
- 47. Proguardとの相性
• JPP以外は基本的にアウト
– 変数名とJSON内のキーの対応が重要
– 難読化すると変数名が変わってしまう
• 逆にPOJOを難読化しなければ行ける
– JPPはPOJO専用クラスを生成して、難読化
前に内部でキー名と変数の対応が出来上がっ
ているため、難読化の影響を受けない
難読化に強いのはJPP!