Android開発におけるAPIからのJSONオブジェクトのデコード
今日はAPI絡みの実装でJSONのパースをやって見てハマりましたので知識を整理します。
iOSなら楽勝ですがAndroidだと若干違っていました。
Androidの方がネストが浅い分見やすい印象がありましたね。
iOSだとAlamofireかAPIKitでAPI通信の実装をしますのでクロージャーがガリガリ書いていきます。
メソッドの細分化が得意な人ならあまりネストが深くならず醜くなりませんが、
今まで色んな現場にアサインした感じでは2/3の確率でネストが深くなっていました。
ですが、Androidはクロージャーの文化がありませんのであまりネストをきにする必要が無いようです。
ただし、ラムダ記法がありますので (引数) -> (処理内容)
という流れがありますのでラムダを乱発したら
ひょっとしたら深いネストが起こるかもしれませんね。
さて、下記のようなJsonファイルがあったとします。
[
{
"access":"JR琵琶湖線彦根駅から徒歩15分",
"address":"滋賀県彦根市金亀町1-1",
"name":"彦根城",
"service":"入場料 大人600円、小人200円 博物館とのセット券 大人1000円、小人350円",
"tel":"0749-22-2742(彦根城管理事務所)",
"url":"http://www.hikoneshi.com/",
"pref" : null
},
{
"access":"JR琵琶湖線安土駅から徒歩25分",
"address":"滋賀県近江八幡市安土町下豊浦",
"name":"安土城跡",
"service":"入山料 大人500円、小人100円 拝観料(土・日曜) 500円",
"tel":"0748-46-4234",
"url":"http://www.azuchi-shiga.com/",
"pref" : null¥
}
]
こちらは下の参考サイトから拝借しました。
JSONを整えたい方は
https://lab.syncer.jp/Tool/JSON-Viewer/
などで頑張って見てください。
AndroidにおけるJSONオブジェクトのパース
Androidでパースしたい場合は JSONArray
を使ってJSONの配列オブジェクトを生成します。
JSONArray jsons = new JSONArray(JsonFile);
for (int i = 0; i < jsons.length(); i++){
JSONObject jsonRslt = jsons.getJSONObject(i);
String access = jsonRslt.getString("access");
String address = jsonRslt.getString("address");
String name = jsonRslt.getString("name");
String service = jsonRslt.getString("service");
String tel = jsonRslt.getString("tel");
String url = jsonRslt.getString("url");
}
これで各変数にオブジェクトを格納できます。
iOSのObjective-Cに比べたらメソッドの名前が良心的ですね。
間違えようがありませんね。
それに比べて、Objective-Cときたら
Androidにおけるnullチェックについて
Android開発でのjsonのキーに対するnullチェックが分かりませんでしたので調べました。
Androidはnullにアクセスしたらアプリがクラッシュするみたいでした。(当然か)
やり方は下の通りらしいです。他にベストプラクティスがあれば教えていただきたいです。
iOS開発では滅多に使いませんでしたが、try-catch構文でerrorを吐くのもポイントだったりします。
JSONObject object = jsons // jsonオブジェクトの変数を生成
if (jsonObject.isNull("pref")) {
// prefに対するvalue(値)がnullである 今回はこっちが通る
} else {
// prefに対するvalue(値)がnullではない
}
こうやってみると、
どう考えてもiOS開発の方が難易度が高いように思うのは自分だけだろうか。
iOSだと検索してもだいたい英語のページしかヒットしなかったから信頼性が欠けるコードを使うしかなかったけど、
Androidだとサクっとベストプラクティスを見つけられるぞ。
Javaエンジニア本当に大丈夫か?こんな楽でいいのか?
iOSだったらほとんどStack Over Flow頼りで検索しまくっていましたね。
Javaエンジニアの方がどう考えても楽な気がして仕方がない・・・。
参考ページ
Android Jsonファイル取得について https://nextat.co.jp/staff/archives/5