我应该在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?
答案 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。如果是这样,做你需要做的事情,如果没有,忽略它。