Java简单JSON对象声明抛出异常

时间:2016-01-03 04:08:31

标签: java json exception-handling

我有一个超级简单的界限:

JSONObject params = new JSONObject("{\"values\": { \"barcode\": \"testing\" } }");

Android工作室告诉我,这行'抛出JSONException',但为什么?我必须在这里做些蠢事。任何帮助表示赞赏

2 个答案:

答案 0 :(得分:3)

JSONException是一个经过检查的例外。这意味着您需要有代码来处理它。您需要catch例外或通过在您的方法上声明throws JSONException让它冒出来。

Java中所有已检查的异常都是这种情况(除了扩展RuntimeException的异常之外的所有异常)。

在你的情况下,由于String是常量且正确的,我会做

   } catch ( JSONException e) {
      // should never happen
      throw new IllegalArgumentException("unexpected parsing error",e);
   }

这会将JSONException(如果出于某种原因,它确实发生)转换为(未经检查的)RuntimeException。

答案 1 :(得分:1)

public JSONObject(String source) throws JSONException {
        this(new JSONTokener(source));
    }

您正在使用上面的方法/构造函数来创建您的JSONObject及其在签名中的说法,它会抛出JSONException,因此您不能简单地执行您所做的事情,

JSONObject params = new JSONObject("{\"values\": { \"barcode\": \"testing\" } }");

您需要在Java try- catch中包含上面的行,因为方法签名明确指定了已检查的异常,因此您需要在try catch中处理它。

try{
JSONObject params = new JSONObject("{\"values\": { \"barcode\": \"testing\" } }");

}catch(JSONException ex){
 //eat or rethrow your exception
}

您必须注意,还有其他JSONObject构造函数没有指定任何已检查的异常,因此您可以像使用简单行一样使用它们,但是您尝试使用的那个指定了一个已检查的异常所以你需要处理 - 否则你的代码将无法编译。