处理错误正常的异常和错误

时间:2013-05-15 15:50:56

标签: java json exception-handling

我有一个JSON字符串,我正在添加多个变量。这里的问题是,有时并非所有数据都会输入内容,因此会返回NullPointerException。

例如,这里有一些代码:

public static void main(String[] args) throws JSONException  {

    JSONObject obj = new JSONObject();

    obj.put("att1", val1);
    obj.put("att2", val2);
    obj.put("att3", val3);
    obj.put("att4", val4);
    obj.put("att5", val5);
    obj.put("att6", val6);

    System.out.println(obj.toString());

}

这会有效,因为我正在抛出异常。但是,有一次我运行它,并且val4不存在,我将得到一个JSONException并且我的整个代码将停止。我真正想要的是代码说“好吧,没有任何名称的val4,所以让我们忽略它并转移到下一行代码。

我所知道的方法是使用连续的if语句(对于每个属性,我在尝试添加它之前检查它是否为null)或使用多个try / catches。

我知道忽略错误是一个巨大的禁忌,所以不是说我想知道是否有一种方法可以忽略错误而只是继续下一行代码就在那里在输入之前检查每条单独行的好方法,如果有空值,请在继续之前忽略该行?

(尽管如此,我很乐意忽略这一段代码的错误)

干杯和TIA, 凯什

2 个答案:

答案 0 :(得分:2)

如果值不为null,您似乎只想添加该对。 JSONObject#putOpt正是这样做的。

参考:
https://developer.android.com/reference/org/json/JSONObject.html#putOpt(java.lang.String,%20java.lang.Object)

答案 1 :(得分:1)

如果您有兴趣忽略异常并继续填充JSONObject,您可以在Map中准备好您的值并使用这样的循环(同时忽略可能被抛出的任何JSONException

JSONObject jsonObj = new JSONObject();
for (Map.Entry<String, String> entry : valMap.entrySet()) {
    try {
        jsonObj.put(entry.getKey(), entry.getValue()); // attr4, null
    } catch (JSONException ignored) {}
}

您使用的数据结构取决于您的存储方式(或获取vals),但我希望您明白这一点。然后,您还应该删除方法声明中的throws JSONException