对于JSONArray解析:在LOOP内部TRY或在TRY内部循环?

时间:2016-11-30 05:20:53

标签: java json

我是JSONArray。我想将其解析为JSONObject。所以Loop和try-catch是必须的 愚蠢的问题是:我应该在TRY中使用FOR循环还是反向?这真的很重要或两者都一样吗? 请告诉我最佳实践(如果两者不相同)。

TRY中的FOR循环:

try {
        for(i=0; i<jsonArray.length(); i++){
            jsonObject = jsonArray.getJSONObject(i);
            //do something
        }

    } catch (JSONException e) {
        e.printStackTrace();
    }


在循环中尝试

for(i=0; i<jsonArray.length(); i++){

        try {
            jsonObject = jsonArray.getJSONObject(i);
            //do something
        } catch (JSONException e) {
            e.printStackTrace();
        }

    }

哪一个更好?

7 个答案:

答案 0 :(得分:5)

这取决于您对数据完整性的认真态度。

  • 第一个示例将运行循环,直到发生异常,一旦执行,将调用catch块并且循环将不再运行。

  • 但是第二个例子将进入try块并尝试执行代码,如果有异常,则调用catch块并排除异常。然而,循环不会结束,下一次迭代将立即运行。

这是一个例子。我们会考虑当i = 4

时会发生一些异常
try {
    for(i=0; i<10; i++){
        System.out.println("" + i);
    }

} catch (Exception e) {
    e.printStackTrace();
}
  

输出 -

0
1
2
3
Exception

并且

for(i=0; i<10; i++){

    try {
        System.out.println("" + i);
    } catch (Exception e) {
        e.printStackTrace();
    }

}
  

输出

0
1
2
3
Exception
5
6
7
8
9

答案 1 :(得分:2)

TL,DR:这一切都归结为您的目的以及如何使用它。

假设您有一个要解析和显示/使用的Object列表,比如说,

[{"name":"Apple"},{"name":"Banana"},{"name":"Mango"}]

如果出现一个数据错误,如果您需要,只使用正确的一个并且不正确的一个,请在循环内使用 TRY

但如果您不想使用任何内容并只处理整个异常,请在TRY 中使用 FOR循环。

例如,如果您收到以下数据:

[{"name":"Apple"},{"name":"Banana},{"name":"Mango"}] // notice the missing " after Banana

如果循环内 TRY ,则只会显示

[{"name":"Apple"},{"name":"Mango"}]

如果在TRY FOR循环,它将不会显示任何内容。

答案 2 :(得分:1)

这取决于场景。如果在循环的任何迭代中都有机会获得异常,那么我认为在循环中尝试更好。因为,在捕获异常后循环将继续。但是,尝试是在循环的一边,然后循环将破坏。我肯定会在循环中尝试,因为它更优化。

答案 3 :(得分:1)

实际上取决于您的需求(以及如何将这些对象用于代码的其余部分)。如果您在循环中编写 尝试 阻止,则循环将继续所有异常。如果您在 尝试 阻止内部运行循环,那么循环将中断以获取任何异常并将转到您的捕获块。

我们什么时候写继续,什么时候在循环中写 break ?这取决于我们的需求,对吧?这就是这种情况。希望,这会有所帮助。

答案 4 :(得分:0)

根据情况可能会有所不同,但我建议在for循环中使用循环,因为你的代码在第3次迭代中发现了任何异常,然后在第4次迭代中结束迭代将是安全的。

最佳做法是,try catch应该只涵盖需要的代码。

答案 5 :(得分:0)

在代码部分中使用try catch总是标准的做法,可能会发生异常。只有一个地方可能发生异常,而且它在for循环中。所以,#34; TRY内循环&#34;是答案。

答案 6 :(得分:0)

我认为你已经得到了答案,可能会有所不同,但我认为这种做法已经足够好了:

    try {
        JSONArray jsonArray = new JSONArray(jsonString);

        int count = jsonArray.length(); 
        for(int i=0 ; i< count; i++){   
            JSONObject jsonObject = jsonArray.getJSONObject(i);
            System.out.println("jsonObject " + i + ": " + jsonObject);
        }
    } catch (JSONException e) {
        e.printStackTrace();
    }

或者你可以使用,做 - 抓住