public static void main(String[] args) throws IOException {
try {
JSONObject json = new JSONObject(readUrl("http://api.wunderground.com" +"/api/106c4dee47162999/history_20060405/q/CA/San_Francisco.json"));
JSONObject data = json.getJSONObject("observations.tempm");
System.out.println(data);
} catch (JSONException e) {
e.printStackTrace();
}
}
private static String readUrl(String string) throws IOException {
BufferedReader reader = null;
try {
String urlString = string;
URL url = new URL(urlString);
reader = new BufferedReader(new InputStreamReader(url.openStream()));
StringBuffer buffer = new StringBuffer();
int read;
char[] chars = new char[1024];
while ((read = reader.read(chars)) != -1)
buffer.append(chars, 0, read);
return buffer.toString();
} finally {
if (reader != null)
reader.close();
}
}
}
2.errors:
org.json.JSONException:找不到JSONObject [“observation.tempm”]。 at org.json.JSONObject.get(JSONObject.java:454) at org.json.JSONObject.getJSONObject(JSONObject.java:553) 在com.parser.ParserObject.main(ParserObject.java:17)
答案 0 :(得分:2)
您使用的JSON的有趣部分是:
{'history':
{'observations':
[
{'tempm':'10.0'}
]
}
}
使用此:
JSONObject json = ...;
JSONObject history = (JSONObject) json.get("history");
JSONArray observations = (JSONArry) json.get("observations");
JSONObject observation0 = (JSONObject) observations.get(0);
String tempm = observation0.get("tempm");
如果您对其他数组元素感兴趣,请使用其他索引。
答案 1 :(得分:0)
'观察'不在root中。你需要先获得'历史'。 “观察”是“历史”的一部分。并且'观察'是一个列表/数组。
答案 2 :(得分:0)
我建议使用'jackson'或'gson'library.parsing native json真是一种痛苦 你甚至可以在一定程度上取消/编组来自JSON的必需字段/对象。