3 回答

TA貢獻1936條經驗 獲得超7個贊
第一個問題
您將錯誤的值傳遞給JSONObject構造函數。看這段代碼:
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
System.out.println(inputLine);
}
JSONObject obj = new JSONObject(inputLine);
該while循環只會完成的時候inputLine是空-所以你的最后一行是等價于:
JSONObject obj = new JSONObject(null);
......這顯然不是你想要的。我想你想要:
JSONObject obj = new JSONObject(response.toString());
請注意,您可能希望使用StringBuilder而不是StringBuffer同時使用,以避免無意義的同步。
下一個問題
如果您的 JSON 實際上是這種形式,[ ... ]那么它就是一個數組,而不是頂層的對象。所以你可能想要:
JSONArray arr = new JSONArray(response.toString());
for (int i = 0; i < arr.length(); i++)
{
String drzava = arr.getJSONObject(i).getString("Dr?ava");
System.out.println(drzava);
}
畢竟,如果您查看您的 JSON,它并沒有將Dr?ava帶有數組的屬性名稱作為值。

TA貢獻1828條經驗 獲得超3個贊
您需要獲取 JSONArray,然后對其進行迭代以解析所需的值。
JSONArray array = new JSONArray(inputLine);
for (int i = 0; i < array.length(); i++) {
System.out.println(array.get(i).get("Dr?ava"));
}

TA貢獻1812條經驗 獲得超5個贊
我認為您對 JSonObject 使用了錯誤的輸入:
double responseCode = conn.getResponseCode();
try (InputStreamReader sr =new InputStreamReader(conn.getInputStream());
BufferedReader in = new BufferedReader(sr)){
// ^ this is Jdk7+, will close your streams after the block exists, like in finally block
...
JSONObject obj = new JSONObject(response.toString()); // pass the input as a String
....
}catch (IOException | JSONException e) {
e.printStackTrace();
}
您的response變量以字符串的形式保存輸入,而inputLine僅保存單行。在最后一次迭代之后,它被設置為空。這將導致 NPE。
添加回答
舉報