LoginSignup
2
2

More than 5 years have passed since last update.

Android開発、JSONオブジェクトのvalueに入るnullのチェック方法について

Posted at

Android開発におけるAPIからのJSONオブジェクトのデコード

今日はAPI絡みの実装でJSONのパースをやって見てハマりましたので知識を整理します。
iOSなら楽勝ですがAndroidだと若干違っていました。
Androidの方がネストが浅い分見やすい印象がありましたね。
iOSだとAlamofireAPIKitでAPI通信の実装をしますのでクロージャーがガリガリ書いていきます。
メソッドの細分化が得意な人ならあまりネストが深くならず醜くなりませんが、
今まで色んな現場にアサインした感じでは2/3の確率でネストが深くなっていました。

ですが、Androidはクロージャーの文化がありませんのであまりネストをきにする必要が無いようです。
ただし、ラムダ記法がありますので(引数) -> (処理内容)という流れがありますのでラムダを乱発したら
ひょっとしたら深いネストが起こるかもしれませんね。

さて、下記のようなJsonファイルがあったとします。

sample.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の配列オブジェクトを生成します。

readjson.java
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を吐くのもポイントだったりします。

json.java

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

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2