0

我有一个 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 语句(对于每个属性,我在尝试添加它之前检查它是否为空)或使用多个 try/catch。

我知道忽略错误是一个很大的禁忌,所以与其说我想知道是否有一种方法可以忽略错误并继续下一行代码有没有一种好方法可以在输入之前检查每一行以及是否有空值,忽略该行再继续?

(尽管,我很乐意忽略这一代码块上的错误)

干杯和 TIA,凯什

4

2 回答 2

2

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

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

于 2013-05-15T15:56:12.587 回答
1

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

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方法声明中的 。

于 2013-05-15T16:08:51.280 回答