2016-04-06 2 views
0

私はJavaでの私のJSON-APIとしてtapestry-jsonを使用するようになってる:JavaでRuntimeExceptionsを投げた関数呼び出しを無視する方法は?

import org.apache.tapestry5.json.JSONObject; 
import org.apache.tapestry5.json.JSONArray; 

は残念ながらJSONArrayからJSONObject Sを読み込むためのoptJSONObject(int) -methodはありません。インデックスまたは値はJSONObjectされていない場合、値がない場合の方法getJSONObject(int)は... RuntimeException

をスローします。

ここではすべてのエントリを無視したいと思います。したがって私はtry-catch-blockでそれをラップしました。

JSONArray arr = new JSONArray("..."); 

for(int i = 0; i < arr.length(); i++) { 

    JSONObject currentEntry; 
    try { 
    // RuntimeException is thrown, if there is no value for the index or if the value is not a JSONObject. 
    currentEntry = arr.getJSONObject(i); 
    } catch (RuntimeException e) { 
    // Ignore this entry 
    continue; 
    } 
    /* 
    if(... currentEntry ...) { 

    } 
    */ 
} 

私にとって、この解決法はおそらくそうでなければならないと思われます。 RuntimeExceptionsを無視するよりエレガントな方法はありますか?

+0

オブジェクトを取得して、それが 'JSONObject'かどうかを確認するだけで済みます。まだ醜いです(もちろん、 'instanceof'、* ugh ... *を使用します。ただし、そのライブラリにはいくつかのユーティリティがあります)、少なくとも例外による制御フローは避けてください。 IMHOこのクラスのデザインはあまりよくありません、それは要素が何であるかを確認する方法を提供する必要があります。 – Ordous

+0

制御フローとして例外処理を使用しないでください。コードが不必要に複雑になります。 – ryanyuyu

答えて

0

インデックスのオブジェクトiinstanceof JSONObjectかどうかを確認することができます。もしそうなら、あなたがしなければならないことをし、そうでなければ無視してください。

1

get(int)メソッドを使用してJSONArrayメソッドからrawオブジェクトを取得し、それがJSONObjectかどうかをテストできます。そうでない場合は、無視します。このよう

JSONArray arr = new JSONArray("..."); 

    for (int i = 0; i < arr.length(); i++) { 
     final Object io = arr.get(i); 
     if (io instanceof JSONObject){ 
      // do something 
     } 
    } 

ところでgetJSONObject(int)は同じことを行いますが、無視するのではなく、例外がスローされます。

関連する問題