我的应用程序连接到Web并检索JSON文件。我有一些问题从这个文件中检索我需要的数据。以下是JSON文件的链接:http://api.wunderground.com/api/f9d9bc3cc3834375/forecast/q/CA/San_Francisco.json
我想在“forecastday”数组中的第一个JSon对象中得到“period”变量的值,该数组应为0.以下是我如何看待这个。 “forecastday”是数组,其中有许多JSon对象,每个对象包含“period”,“icon”......“pop”等变量。
在我的代码中,我尝试获取JSON数组“forecastday”,然后获取数组的第一个Json对象,然后在该对象中检索“period”的值并将其设置在TextView中:
protected void onPostExecute(String response) {
if(response == null) {
response = "THERE WAS AN ERROR";
}
progressBar.setVisibility(View.GONE);
try {
JSONObject jsonObj = new JSONObject(response);
JSONArray contacts = jsonObj.getJSONArray("forecastday");
JSONObject c = contacts.getJSONObject(0);
String period = c.getString("period");
responseView.setText(period);
} catch (JSONException e) {
e.printStackTrace();
}
}
当我运行代码时,没有检索到任何内容。我很想和JSon一起工作,我想知道我是不是看错了。请帮忙。
答案 0 :(得分:3)
您的“forecastday”JSONArray位于响应的“预测”JSONObject内的“txt_forecast”JSONObject内,因此您必须从此JSONObject中提取JSONArray,而不是从根JSON响应中提取:
try {
JSONObject jsonObj = new JSONObject(response);
--> JSONObject forecatsObj = jsonObj.getJSONObject("forecast");
--> JSONObject txtForecatsObj = forecatsObj.getJSONObject("txt_forecast");
JSONArray contacts = txtForecatsObj.getJSONArray("forecastday");
...
答案 1 :(得分:2)
你很接近,但不正确,请尝试这样:
JSONObject jsonObj = new JSONObject(response);
JSONObject forecast = jsonObj.getJSONObject("forecast");
JSONObject txtForecast = forecast.getJSONObject("txt_forecast");
JSONArray forecastDay = txtForecast.getJSONArray("forecastday");
//parse the first period value
String period = forecastDay.getJSONObject(0).getString("period");
responseView.setText(period);
答案 2 :(得分:0)
试试这段代码:
try {
JSONObject jsonObj = new JSONObject(response);
JSONObject forecastObj = jsonObj.getJSONObject("forecast");
JSONObject txt_forecastObj = forecastObj.getJSONObject("txt_forecast");
JSONArray foracastdayArray = txt_forecastObj.getJSONArray("foracastday");
JSONObject oOjb0 = foracastdayArray.getJSONObject(0);
String period = oOjb0.getString("perioed");
}catch (Exception e){
}
答案 3 :(得分:0)
这段代码对我很有用:
JSONObject jsonResponse = new JSONObject(responce);
JSONArray jsonMainNode = jsonResponse.optJSONArray("forecastday");
for (int i = 0; i < jsonMainNode.length(); i++) {
JSONObject jsonChildNode = jsonMainNode.getJSONObject(i);
String period = jsonChildNode.optString("period");
responceView.setText(period);
}