3 回答
TA贡献1936条经验 获得超6个赞
第一个问题
您将错误的值传递给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。
添加回答
举报