nullでJSON Exceptionになるのを避ける

Android
Java

APIなどを作っているときに、やたらとJSON Exceptionが起こるので、イヤになっちゃう人もいるはず…

たとえば、intが返ってくるはずだったAPIがnullだったりすると、

json.JSONException: Value null at weight of type org.json.JSONObject$1 cannot be converted to int

となって、JSONExceptionがおこっちゃいます。

次のようにしてもムダです。

 JSONObject row = delivery_array.getJSONObject(i);
 if(row.getInt("weight")!=null) {
        weight = row.getInt("weight");
 }
 row.getInt("weight")

の時点でweightがnullだとJSONExceptionになっちゃうからです。

この値はnullになりそうだ、という場合は先にisNullでnullじゃないかを判定しておきましょう。

 JSONObject row = delivery_array.getJSONObject(i);
 if(!row.isNull("weight")) {
        weight = row.getInt("weight");
 }

追記(2016/11/15)というよりこっから先のほうが参考になるかも

実は、JSONObjectにoptStringとかoptIntという関数があるようです!

https://developer.android.com/reference/org/json/JSONObject.html#optString(java.lang.String)

知らなかったー!!
これを使えば、このキーのJSON自体が存在しない場合、nullなどを返してくれるので、JSONExceptionでブチ落ちて即死という事態を防げます。

(参考)JSON: the difference between getString() and optString()
http://stackoverflow.com/questions/13790726/json-the-difference-between-getstring-and-optstring/13790789

Googleのサンプルコード見てて、この関数の存在に気づきました。

カテゴリーJava

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です