SlideShare a Scribd company logo
1 of 49
Androidで使える
JSON-Javaライブラリ
 JSON日の金曜日 1週目
     2012/7/13(金)
aboutme.json
{
    "name":"Yukiya Nakagawa",
    "nick_name":"なかざん",
    "screen_name":"Nkzn",
    "org":[
        {
            "name":"ウォーターセル株式会社",
            "activity":"農業支援システム「アグリノート」"
        },
        {
            "name":"日本Androidの会 新潟支部",
            "activity":"さいきんなにもやってない(´・ω・`)"
        }
    ]
}
スマホと鯖とJavaScriptの美味しい関係

なぜJSON×Androidなのか?
鯖と端末の関係
鯖と端末の関係
 鯖だと思いねえ




      データのやり取り
「データ」
• HTTP通信でやり取りできるものの例
 – XML
   • Java系フレームワークの伝統と信頼
   • Android向けの標準ライブラリでも豊富にサポート
   • Content-Type: application/xml
 – 平文
   • 構造化とかどうでもいいとき
   • Content-Type: text/plain
 – JSON
   • マルチプラットフォーム展開の強い味方
   • Content-Type: application/json
マルチプラットフォーム展開
          鯖だと思いねえ




                    Webアプリ




スマートフォン
 タブレット
Webアプリといえば




JavaScript
マルチプラットフォーム展開
            鯖だと思いねえ




      XML             JSON


              クライアントでの
               受け取りが楽!
                             Webアプリ




スマートフォン
 タブレット
マルチプラットフォーム展開
            鯖だと思いねえ




      XML             JSON




            2種類用意するの、
              無駄じゃね?         Webアプリ




スマートフォン
 タブレット
マルチプラットフォーム展開
              鯖だと思いねえ
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\|




スマートフォン
 タブレット
Parse & Serialize

JSON-Javaライブラリの役割
JSON-Javaライブラリの役割
• 最低限:JSONデータが読めること
• JSON文字列とJavaオブジェクト(POJO)
  の相互変換
 – Java → JSON:シリアライズ
 – JSON → Java:パース(デシリアライズ)
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":"さいきんなにもやってない(´・ω・`)”
     }                                    }
 }                                      ]
                                    }
POJO
• Plain Old Java Object
  – 「昔ながらの素朴なJavaオブジェクト」
  – POJO自体には命名規則はない
  – POJOの一種であるJavaBeansの規約/命名規
    則が流用される
    • publicな引数なしコンストラクタ
    • いくつかのインスタンス変数
    • 上記に対応するgetter/setter
  – JavaBeansよりはゆるふわ
できるだけ頑張らない方向の

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

• 選定基準
 – 依存ライブラリがほぼないこと
  • 外部jarが増えるとMaven使いたくなる
  • MavenとAndroidは相性悪め
 – 使い方が分かりやすいこと
  • 独断と偏見
 – Androidに存在しないJavaAPIを使っていない
   こと
  • JavaVMじゃなくてDalvikVMだからね!
  • 基本的に気にしなくても問題ない
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を利用する移植作
   – 軽量
AndroidSDKにも付いてる

org.json
パース
パース
パース
シリアライズ
感想
1.   めんどい
2.   めんどい
3.   POJO関係ねえ
4.   めんどい
いたれりつくせり

JSONIC
JSONIC
• 特徴
 – POJO⇔JSON変換
 – 対応している型の数がなんかすごい
 – JavaScriptに親和的な出力
   • JSP内でJS用にJSONを出力する場合とか
   • エスケープかけてくれたり
 – XML→JSON変換
   • (org.w3c.dom.Document/Elementを経由)
パース
シリアライズ
感想
1. jar1個にパス通したら使えた便利
2. 基本的に1行でなんとかなる便
3. JSONObjectとは一体なんだったのか
信仰が貴方の力となる ―― グーメン

google-gson
google-gson
• 特徴
 – POJO⇔JSON変換
 – 字句解析機能も備えているため
   org.json.JSONObjectのような真似も可能
 – 速さにムラがあるらしい(後述)
パース
シリアライズ
感想
1. JSONIC触った後だと「シリアライズ時
   の型くらい自分で分かれよ」と思わなく
   もない
2. jar1個にパス通すだけでいいのはやはり
   楽
すごいぞぼくらのJPP!

JsonPullParser

               作者@vvakame(ジェイソン仕様)
特徴
• APT(Annotation Processing Tool)を利用して
  いる
  – アノテーションに応じてクラスの自動生成とか出
    来る
  – 詳しくはこのへん
    • http://www.slideshare.net/vvakame/apt-7568357
• 各POJOに応じたJSONパーサーを自動生成
• 軽量
  – JSONIC 208KB
  – gson: 184KB
  – JPP: 45KB
パース
シリアライズ
感想
1. いつもアグリノート内でお世話になってい
   ます
2. 正直アノテーション付けるの面倒臭いとき
   ある
 – でもお陰で型安全になってる部分ある
3. 割と作るのが簡単なTokenConverterを実装
   すればJavaの型に1対1対応できない値が
   来ても大丈夫!
 – 文字列値が来るか配列が来るか分からないキー
   のための「String2ListConverter」作りました。
ぶっちゃけた話

総括
ぶっちゃけorg.jsonのやつ以外は
    好みじゃね?
使い分け
• 1 Entry per Day: Androidアプリで使える
  JSONライブラリ比較
 – http://mstssk.blogspot.jp/2011/12/androidjson.
   html
 – ぶっちゃけ今回の発表はここの記事参考にし
   ただけです。
 – 色んなパフォーマンス計測結果が出てます。
 – 次ページで特徴に合わせた使い分けをば。
それぞれの特徴
• JSONIC
  – ゆるふわな使い勝手と引換にファイルも動作
    も重い
• google-gson
  – パースは超速いけどシリアライズは遅い
• JsonPullParser
  – 専用クラスを生成した恩恵で安定のスピード
それぞれの特徴からみた使い道

• JSONIC
  – とにかくすぐ使いたい&そこまで速度は求め
    てないとき
• google-gson
  – パースしかする予定がないとき
• JsonPullParser
  – 本体を重くしたくない時
Proguard

Android特有の悩み
セキュリティ問題
• Androidのリバースエンジニアリング手法
  は既に確立している
• そのままリリースするとJavaファイルま
  で丸見え
• ソースコード難読化という足止めが必要
• 標準難読化ツール「Proguard」との相性
  は重要となる
Proguardとの相性

• JPP以外は基本的にアウト
 – 変数名とJSON内のキーの対応が重要
 – 難読化すると変数名が変わってしまう
  • 逆にPOJOを難読化しなければ行ける
 – JPPはPOJO専用クラスを生成して、難読化
   前に内部でキー名と変数の対応が出来上がっ
   ているため、難読化の影響を受けない

       難読化に強いのはJPP!
Stealth Marketing

結論
みんなJPPつかおうぜ

        って言えって言われました

More Related Content

What's hot

Cable utp categoría 5
Cable utp categoría 5Cable utp categoría 5
Cable utp categoría 5
jairjajaja
 

What's hot (7)

Bubble deck slab seminar ppt
Bubble deck slab seminar pptBubble deck slab seminar ppt
Bubble deck slab seminar ppt
 
Reinforcement corrosion part2
Reinforcement corrosion part2Reinforcement corrosion part2
Reinforcement corrosion part2
 
Cable utp categoría 5
Cable utp categoría 5Cable utp categoría 5
Cable utp categoría 5
 
U BOOT TECHNOLOGY
U BOOT TECHNOLOGYU BOOT TECHNOLOGY
U BOOT TECHNOLOGY
 
instalación cable UTP
instalación cable UTPinstalación cable UTP
instalación cable UTP
 
U boot beton technology
U boot beton technologyU boot beton technology
U boot beton technology
 
Bendable concrete
Bendable concreteBendable concrete
Bendable concrete
 

Viewers also liked

Androidで部 第7回 APTすごい
Androidで部 第7回 APTすごいAndroidで部 第7回 APTすごい
Androidで部 第7回 APTすごい
Masahiro Wakame
 
僕の考えるAPT開発の常識 ぐだ生 2011/04/09版
僕の考えるAPT開発の常識 ぐだ生 2011/04/09版僕の考えるAPT開発の常識 ぐだ生 2011/04/09版
僕の考えるAPT開発の常識 ぐだ生 2011/04/09版
Masahiro Wakame
 

Viewers also liked (10)

Androidで部 第7回 APTすごい
Androidで部 第7回 APTすごいAndroidで部 第7回 APTすごい
Androidで部 第7回 APTすごい
 
僕の考えるAPT開発の常識 ぐだ生 2011/04/09版
僕の考えるAPT開発の常識 ぐだ生 2011/04/09版僕の考えるAPT開発の常識 ぐだ生 2011/04/09版
僕の考えるAPT開発の常識 ぐだ生 2011/04/09版
 
僕の考えるAPT開発の常識
僕の考えるAPT開発の常識僕の考えるAPT開発の常識
僕の考えるAPT開発の常識
 
プログラミング言語Egison - 表現の新たな抽象化の発見
プログラミング言語Egison - 表現の新たな抽象化の発見プログラミング言語Egison - 表現の新たな抽象化の発見
プログラミング言語Egison - 表現の新たな抽象化の発見
 
Android 開発を加速するオープンソースライブラリ
Android 開発を加速するオープンソースライブラリAndroid 開発を加速するオープンソースライブラリ
Android 開発を加速するオープンソースライブラリ
 
イマドキの現場で使えるJavaライブラリ事情
イマドキの現場で使えるJavaライブラリ事情イマドキの現場で使えるJavaライブラリ事情
イマドキの現場で使えるJavaライブラリ事情
 
Swift : クラス継承とプロトコル拡張を比べてみる #yidev
Swift : クラス継承とプロトコル拡張を比べてみる #yidevSwift : クラス継承とプロトコル拡張を比べてみる #yidev
Swift : クラス継承とプロトコル拡張を比べてみる #yidev
 
(旧版) オープンソースライセンスの基礎と実務
(旧版) オープンソースライセンスの基礎と実務(旧版) オープンソースライセンスの基礎と実務
(旧版) オープンソースライセンスの基礎と実務
 
短期間で新技術を学ぶ技術
短期間で新技術を学ぶ技術短期間で新技術を学ぶ技術
短期間で新技術を学ぶ技術
 
Coding in the context era
Coding in the context eraCoding in the context era
Coding in the context era
 

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

Ja sst'14東北 いまさら聞けないJenkins
Ja sst'14東北 いまさら聞けないJenkinsJa sst'14東北 いまさら聞けないJenkins
Ja sst'14東北 いまさら聞けないJenkins
勝信 今井
 
JavaEdge第3回ライブセッション
JavaEdge第3回ライブセッションJavaEdge第3回ライブセッション
JavaEdge第3回ライブセッション
Yoichiro Tanaka
 
Osc2012.dbに行ってきました
Osc2012.dbに行ってきましたOsc2012.dbに行ってきました
Osc2012.dbに行ってきました
Masaru Kobashigawa
 

Similar to Androidで使えるJSON-Javaライブラリ (20)

Groovyでjson
GroovyでjsonGroovyでjson
Groovyでjson
 
JSON Value into Power Automate
JSON Value into Power AutomateJSON Value into Power Automate
JSON Value into Power Automate
 
Bp study39 nodejs
Bp study39 nodejsBp study39 nodejs
Bp study39 nodejs
 
130329 perl casual_ruik
130329 perl casual_ruik130329 perl casual_ruik
130329 perl casual_ruik
 
Antのススメ
AntのススメAntのススメ
Antのススメ
 
Ja sst'14東北 いまさら聞けないJenkins
Ja sst'14東北 いまさら聞けないJenkinsJa sst'14東北 いまさら聞けないJenkins
Ja sst'14東北 いまさら聞けないJenkins
 
Rx java x retrofit
Rx java x retrofitRx java x retrofit
Rx java x retrofit
 
GroovyでJSON2014
GroovyでJSON2014GroovyでJSON2014
GroovyでJSON2014
 
Node.js を選ぶとき 選ばないとき
Node.js を選ぶとき 選ばないときNode.js を選ぶとき 選ばないとき
Node.js を選ぶとき 選ばないとき
 
Why js
Why jsWhy js
Why js
 
Groovyコンファレンス
GroovyコンファレンスGroovyコンファレンス
Groovyコンファレンス
 
探検!SwiftyJSON
探検!SwiftyJSON探検!SwiftyJSON
探検!SwiftyJSON
 
Javaと小道具
Javaと小道具Javaと小道具
Javaと小道具
 
JavaEdge第3回ライブセッション
JavaEdge第3回ライブセッションJavaEdge第3回ライブセッション
JavaEdge第3回ライブセッション
 
LODを使ってみよう!
LODを使ってみよう!LODを使ってみよう!
LODを使ってみよう!
 
Osc2012.dbに行ってきました
Osc2012.dbに行ってきましたOsc2012.dbに行ってきました
Osc2012.dbに行ってきました
 
【Potatotips #23】手軽にHTTPでJSONにアクセスできる環境を用意する
【Potatotips #23】手軽にHTTPでJSONにアクセスできる環境を用意する【Potatotips #23】手軽にHTTPでJSONにアクセスできる環境を用意する
【Potatotips #23】手軽にHTTPでJSONにアクセスできる環境を用意する
 
Djangoフレームワークの紹介
Djangoフレームワークの紹介Djangoフレームワークの紹介
Djangoフレームワークの紹介
 
Javaで1から10まで書いた話(sanitized)
Javaで1から10まで書いた話(sanitized)Javaで1から10まで書いた話(sanitized)
Javaで1から10まで書いた話(sanitized)
 
ふぉとぶらり+LODAC -iPhoneアプリでのSPARQLでの活用事例-
ふぉとぶらり+LODAC -iPhoneアプリでのSPARQLでの活用事例-ふぉとぶらり+LODAC -iPhoneアプリでのSPARQLでの活用事例-
ふぉとぶらり+LODAC -iPhoneアプリでのSPARQLでの活用事例-
 

More from Yukiya Nakagawa

React Nativeはクロスプラットフォームモバイルアプリ開発の夢を見るか #DroidKaigi
React Nativeはクロスプラットフォームモバイルアプリ開発の夢を見るか #DroidKaigiReact Nativeはクロスプラットフォームモバイルアプリ開発の夢を見るか #DroidKaigi
React Nativeはクロスプラットフォームモバイルアプリ開発の夢を見るか #DroidKaigi
Yukiya Nakagawa
 
PechaKucha Niigata #3 2013.7.27
PechaKucha Niigata #3 2013.7.27PechaKucha Niigata #3 2013.7.27
PechaKucha Niigata #3 2013.7.27
Yukiya Nakagawa
 

More from Yukiya Nakagawa (20)

Atomic Designは「マルチ」で真価を発揮する
Atomic Designは「マルチ」で真価を発揮するAtomic Designは「マルチ」で真価を発揮する
Atomic Designは「マルチ」で真価を発揮する
 
Androidの入門書を書いたときに気にしたこと #NDS57
Androidの入門書を書いたときに気にしたこと #NDS57Androidの入門書を書いたときに気にしたこと #NDS57
Androidの入門書を書いたときに気にしたこと #NDS57
 
React Nativeの光と闇
React Nativeの光と闇React Nativeの光と闇
React Nativeの光と闇
 
アグリノートにおけるGIS情報を活かした圃場・作付管理の取り組み @ FOSS4GJ
アグリノートにおけるGIS情報を活かした圃場・作付管理の取り組み @ FOSS4GJアグリノートにおけるGIS情報を活かした圃場・作付管理の取り組み @ FOSS4GJ
アグリノートにおけるGIS情報を活かした圃場・作付管理の取り組み @ FOSS4GJ
 
React Native Androidはなぜ動くのか
React Native Androidはなぜ動くのかReact Native Androidはなぜ動くのか
React Native Androidはなぜ動くのか
 
CSS in JSの話 #friday13json
CSS in JSの話 #friday13jsonCSS in JSの話 #friday13json
CSS in JSの話 #friday13json
 
React Nativeアプリをリリースし続けるために、最初に行う8つの取り組み
React Nativeアプリをリリースし続けるために、最初に行う8つの取り組みReact Nativeアプリをリリースし続けるために、最初に行う8つの取り組み
React Nativeアプリをリリースし続けるために、最初に行う8つの取り組み
 
React Nativeはクロスプラットフォームモバイルアプリ開発の夢を見るか #DroidKaigi
React Nativeはクロスプラットフォームモバイルアプリ開発の夢を見るか #DroidKaigiReact Nativeはクロスプラットフォームモバイルアプリ開発の夢を見るか #DroidKaigi
React Nativeはクロスプラットフォームモバイルアプリ開発の夢を見るか #DroidKaigi
 
AndroidLint #DroidKaigi
AndroidLint #DroidKaigiAndroidLint #DroidKaigi
AndroidLint #DroidKaigi
 
Android Lintを覚えてベテラン開発者に追いつこう #ndsmeetup
Android Lintを覚えてベテラン開発者に追いつこう #ndsmeetupAndroid Lintを覚えてベテラン開発者に追いつこう #ndsmeetup
Android Lintを覚えてベテラン開発者に追いつこう #ndsmeetup
 
僕らのデータ同期プラクティス
僕らのデータ同期プラクティス僕らのデータ同期プラクティス
僕らのデータ同期プラクティス
 
Android再入門 〜Eclipseのことは忘れろ〜
Android再入門 〜Eclipseのことは忘れろ〜Android再入門 〜Eclipseのことは忘れろ〜
Android再入門 〜Eclipseのことは忘れろ〜
 
もう一度Kotlinの話をしよう #ndsmeetup4
もう一度Kotlinの話をしよう #ndsmeetup4もう一度Kotlinの話をしよう #ndsmeetup4
もう一度Kotlinの話をしよう #ndsmeetup4
 
アグリノートを支える技術
アグリノートを支える技術アグリノートを支える技術
アグリノートを支える技術
 
NDS36 Kotlin Cute
NDS36 Kotlin CuteNDS36 Kotlin Cute
NDS36 Kotlin Cute
 
NDS36 Java7&Java8
NDS36 Java7&Java8NDS36 Java7&Java8
NDS36 Java7&Java8
 
Coworking Business Forum in NIIGATA 2013
Coworking Business Forum in NIIGATA 2013Coworking Business Forum in NIIGATA 2013
Coworking Business Forum in NIIGATA 2013
 
Niigata.rb#03
Niigata.rb#03Niigata.rb#03
Niigata.rb#03
 
PechaKucha Niigata #3 2013.7.27
PechaKucha Niigata #3 2013.7.27PechaKucha Niigata #3 2013.7.27
PechaKucha Niigata #3 2013.7.27
 
ぼくのかんがえたふつうのあんどろいどかいはつ
ぼくのかんがえたふつうのあんどろいどかいはつぼくのかんがえたふつうのあんどろいどかいはつ
ぼくのかんがえたふつうのあんどろいどかいはつ
 

Recently uploaded

Recently uploaded (7)

Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
2024年5月17日 先駆的科学計算フォーラム2024 機械学習を用いた新たなゲーム体験の創出の応用
2024年5月17日 先駆的科学計算フォーラム2024 機械学習を用いた新たなゲーム体験の創出の応用2024年5月17日 先駆的科学計算フォーラム2024 機械学習を用いた新たなゲーム体験の創出の応用
2024年5月17日 先駆的科学計算フォーラム2024 機械学習を用いた新たなゲーム体験の創出の応用
 
ネットワーク可視化 振る舞い検知(NDR)ご紹介_キンドリル202405.pdf
ネットワーク可視化 振る舞い検知(NDR)ご紹介_キンドリル202405.pdfネットワーク可視化 振る舞い検知(NDR)ご紹介_キンドリル202405.pdf
ネットワーク可視化 振る舞い検知(NDR)ご紹介_キンドリル202405.pdf
 
LoRaWAN無位置ロープ型水漏れセンサー WL03A-LB/LSカタログ ファイル
LoRaWAN無位置ロープ型水漏れセンサー WL03A-LB/LSカタログ ファイルLoRaWAN無位置ロープ型水漏れセンサー WL03A-LB/LSカタログ ファイル
LoRaWAN無位置ロープ型水漏れセンサー WL03A-LB/LSカタログ ファイル
 
Hyperledger Fabricコミュニティ活動体験& Hyperledger Fabric最新状況ご紹介
Hyperledger Fabricコミュニティ活動体験& Hyperledger Fabric最新状況ご紹介Hyperledger Fabricコミュニティ活動体験& Hyperledger Fabric最新状況ご紹介
Hyperledger Fabricコミュニティ活動体験& Hyperledger Fabric最新状況ご紹介
 
LoRaWAN無位置ロープ式水漏れセンサーWL03A 日本語マニュアル
LoRaWAN無位置ロープ式水漏れセンサーWL03A 日本語マニュアルLoRaWAN無位置ロープ式水漏れセンサーWL03A 日本語マニュアル
LoRaWAN無位置ロープ式水漏れセンサーWL03A 日本語マニュアル
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 

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