在Android

时间:2015-10-31 15:13:28

标签: android json

我的应用程序连接到Web并检索JSON文件。我有一些问题从这个文件中检索我需要的数据。以下是JSON文件的链接:http://api.wunderground.com/api/f9d9bc3cc3834375/forecast/q/CA/San_Francisco.json

以下是它的样子片段: enter image description here

我想在“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一起工作,我想知道我是不是看错了。请帮忙。

4 个答案:

答案 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);
}