在没有连续Try-Catch块的情况下解析JSON

Dan*_*ali 5 java android json

我想解析一个JSON,但每次得到一个值时,我都必须将指令放在try-catch块中.这是一个例子:

try {
        this.setID(jsonObject.getLong("id"));
    } catch (JSONException e) {
    }
    try {
        this.setName(jsonObject.getString("name"));
    } catch (JSONException e) {
    }
//and so on....
Run Code Online (Sandbox Code Playgroud)

我不在乎指令是否出现异常.所以我想知道是否可以删除所有try-catch块并将所有指令放在一起.

实际上它更像是一个java问题而不仅仅是一个android问题....

编辑

只是澄清问题是什么.当因为没有我正在寻找的标签而出现异常时,我会继续进行下一个标签检查,而不是处理异常.要做到这一点,我必须编写上面发布的代码,因此一系列try-catch块.我一直在寻找更快(更优雅)的解决方案.

kco*_*ock 12

您可以使用opt方法而不是get方法,假设密钥不存在是可以的.如果密钥不是可选的,并且您的应用程序无法从那些并非全部存在的字段中恢复,那么您肯定应该使用这些get方法并在遇到错误时快速失败.

您可以使用的另一种有用的方法是has()方法.这将检查是否存在给定键的映射.(例如if (json.has("id") id = json.optString("id"))).


Sot*_*lis 8

也许我不明白你在问什么,但为什么不把所有的调用都jsonObject放在同一个try-catch块中呢?

try {
    this.setID(jsonObject.getLong("id"));
    this.setName(jsonObject.getString("name"));
} catch (JSONException e) {
    // log or consume it some other way
}
Run Code Online (Sandbox Code Playgroud)

永远不应该只是吞下例外.至少记录一个错误.

  • 您也可以使用`opt`方法而不是`get`方法.如果无法检索到值,这些将返回默认值,并且不会抛出异常.但是,只有在值不存在的情况下才能使用,否则您应该明确处理异常情况. (2认同)