如何忽略在Java中抛出RuntimeExceptions的函数调用?

时间:2016-04-06 12:39:03

标签: java arrays json

我应该在Java中使用tapestry-json作为我的JSON-API:

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

很遗憾,没有optJSONObject(int) - 方法可以从JSONObject中读取JSONArray。方法getJSONObject(int)引发RuntimeException

  

...如果索引没有值或者该值不是JSONObject。

现在我想忽略所有这些条目。因此,我把它包裹在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?

2 个答案:

答案 0 :(得分:1)

您可以使用JSONArray方法从get(int)获取原始对象,然后测试它是否为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
        }
    }

btw getJSONObject(int)做同样的事,但抛出异常而不是忽略。

答案 1 :(得分:0)

您可以检查索引i处的对象是否为instanceof JSONObject。如果是这样,做你需要做的事情,如果没有,忽略它。