2016-10-23 23 views
0

ここで私はjsonの応答の結果がありますが、私は予測配列にアクセスするための正しいコードを取得する必要があります。JavaのJSON配列の要素をアクセス

{ 
"query": { 
    "count": 1, 
    "created": "2016-10-23T02:37:21Z", 
    "lang": "en-US", 
    "results": { 
    "channel": { 
    "units": { 
    "distance": "mi", 
    "pressure": "in", 
    "speed": "mph", 
    "temperature": "F" 
    }, 
    "title": "Yahoo! Weather - Kingston, Saint Andrew, JM", 
    "link": "http://us.rd.yahoo.com/dailynews/rss/weather/Country__Country/*https://weather.yahoo.com/country/state/city-109251/", 
    "description": "Yahoo! Weather for Kingston, Saint Andrew, JM", 
    "language": "en-us", 
    "lastBuildDate": "Sat, 22 Oct 2016 09:37 PM EST", 
    "ttl": "60", 
    "location": { 
    "city": "Kingston", 
    "country": "Jamaica", 
    "region": " Saint Andrew" 
    }, 
    "wind": { 
    "chill": "77", 
    "direction": "0", 
    "speed": "0" 
    }, 
    "atmosphere": { 
    "humidity": "90", 
    "pressure": "988.0", 
    "rising": "0", 
    "visibility": "15.3" 
    }, 
    "astronomy": { 
    "sunrise": "6:3 am", 
    "sunset": "5:40 pm" 
    }, 
    "image": { 
    "title": "Yahoo! Weather", 
    "width": "142", 
    "height": "18", 
    "link": "http://weather.yahoo.com", 
    "url": "http://l.yimg.com/a/i/brand/purplelogo//uh/us/news-wea.gif" 
    }, 
    "item": { 
    "title": "Conditions for Kingston, Saint Andrew, JM at 09:00 PM EST", 
    "lat": "18.015711", 
    "long": "-76.79731", 
    "link": "http://us.rd.yahoo.com/dailynews/rss/weather/Country__Country/*https://weather.yahoo.com/country/state/city-109251/", 
    "pubDate": "Sat, 22 Oct 2016 09:00 PM EST", 
    "condition": { 
     "code": "27", 
     "date": "Sat, 22 Oct 2016 09:00 PM EST", 
     "temp": "77", 
     "text": "Mostly Cloudy" 
    }, 
    "forecast": [ 
     { 
     "code": "4", 
     "date": "22 Oct 2016", 
     "day": "Sat", 
     "high": "80", 
     "low": "75", 
     "text": "Thunderstorms" 
     }, 
     { 
     "code": "4", 
     "date": "23 Oct 2016", 
     "day": "Sun", 
     "high": "80", 
     "low": "75", 
     "text": "Thunderstorms" 
     }, 
     { 
     "code": "4", 
     "date": "24 Oct 2016", 
     "day": "Mon", 
     "high": "80", 
     "low": "76", 
     "text": "Thunderstorms" 
     }, 
     { 
     "code": "4", 
     "date": "25 Oct 2016", 
     "day": "Tue", 
     "high": "80", 
     "low": "74", 
     "text": "Thunderstorms" 
     }, 
     { 
     "code": "4", 
     "date": "26 Oct 2016", 
     "day": "Wed", 
     "high": "80", 
     "low": "75", 
     "text": "Thunderstorms" 
     }, 
     { 
     "code": "4", 
     "date": "27 Oct 2016", 
     "day": "Thu", 
     "high": "80", 
     "low": "75", 
     "text": "Thunderstorms" 
     }, 
     { 
     "code": "4", 
     "date": "28 Oct 2016", 
     "day": "Fri", 
     "high": "78", 
     "low": "74", 
     "text": "Thunderstorms" 
     } 
    ], 

    "guid": { 
     "isPermaLink": "false" 
    } 
    } 
    } 
    } 
} 
} 

これは私が試していたものですが、動作しませんでした。予測JSONArrayに正しくアクセスする必要があります。正しい表記法は何ですか?

public void populate(JSONObject data) throws JSONException { 

JSONArray jArr = data.getJSONObject("item").getJSONObject("condition").getJSONArray("forecast"); 


for(int i=0;i<jArr.length();i++){ 
    JSONObject jDayForecast = jArr.getJSONObject(i); 
    String date = jDayForecast.getString("date"); 
    String text = jDayForecast.getString("text"); 
} 

}配列を予測するための参照を取得していないよう

は、この行は常にnullを返しますか?

JSONArray jArr = data.getJSONArray( "forecast");

+0

あなたが移入するために何を渡しています関数 ?! –

答えて

1

あなたはpopulate関数にchannelオブジェクトを渡している場合は、間違ったオブジェクト

JSONArray jArr = data.getJSONObject("query") 
.getJSONObject("results") 
.getJSONObject("channel") 
.getJSONObject("item") 
.getJSONArray("forecast"); 

を得る:

JSONArray jArr = data.JSONObject("item") 
.getJSONArray("forecast"); 
1

あなたがこの方法を試すことができます:

try{ 
     /*Your response Object*/ 
     JSONObject responseObj = new JSONObject(mResponse); 

     /*Getting query Object*/ 
     JSONObject queryObj = responseObj.getJSONObject("query"); 

     /*Getting result Object*/ 
     JSONObject resultObj = queryObj.getJSONObject("results"); 

     /*Getting channel Object*/ 
     JSONObject channelObj = resultObj.getJSONObject("channel"); 

     /*Getting item Object*/ 
     JSONObject itemObj = channelObj.getJSONObject("item"); 

     /*Getting forecast Array*/ 
     JSONArray forecastArray = itemObj.getJSONArray("forecast"); 

     /*Now you could iterate your array*/ 
     for(int i = 0 ; i < forecastArray.length(); i++){ 

      JSONObject forecastObj = forecastArray.getJSONObject(i); 
      String code = forecastObj.getString("code"); 
      // As same as other parameters 
     } 


    }catch (Exception e){ 

    } 
+0

そのスチールは機能していない – Kira

+0

@Kira:今どのようなエラーが表示されていますか?入力文字列を確認してください。あなたは正しいレスポンス文字列を渡していますか? – Jai

+0

@Kira:populate関数内に完全なtry catchブロックをコピーし、JSONobjectではなく入力パラメータとして基本応答文字列を渡します。 – Jai

関連する問題