从JSON读取时出现异常

6
我有这段代码。
JSONObject obj;
try {
    obj = new JSONObject(readUrl("http://dleel.ps/ss.txt"));
    List<String> list = new ArrayList<String>();
    JSONArray array = obj.getJSONArray("data");

    for(int i = 0 ; i < array.length() ; i++) {
        if (array.getJSONObject(i).getString("link")!=null)
        System.out.println(array.getJSONObject(i).getString("link"));
    }
}

当没有链接时为什么会出现异常(JSONObject["link"]未找到),在if条件中应该放置什么内容? 另外,我尝试使用optJSONArray而不是getJSONArray,但结果相同。


什么异常?请发布堆栈跟踪。 - Brian Roach
你可以在readUrl函数中显示的txt中看到JSON文件。 - Peril
@Brain Roach java.util.NoSuchElementException: JSONObject["link"]未找到。它读取了第一个,但由于第二个是null而无法读取。 - Peril
1
@Salah:这里有很多JSON。请努力找出哪一部分引起了问题,并向我们展示您遇到麻烦的异常。阅读http://tinyurl.com/so-hints以获取有关如何撰写好问题的建议。 - Jon Skeet
2个回答

16

getString() 方法会在未找到键时抛出异常。 建议改用 has() 方法:

if (array.getJSONObject(i).has("link"))

2
您可能希望将其接受为正确答案,这样可以帮助其他遇到相同问题的人 :) - Suraj Chandran
4
您也可以使用.optString("link")方法,如果字符串不存在则返回null,而不是抛出异常。 - lucasmo
@SurajChandran 只是一个快速的问题,如何将 getJSONObject(i).getString("link") 与另一个字符串进行比较? - Peril

2

要测试一个键是否存在,请使用以下方法:

array.getJSONObject(i).has("link")

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接