2016-05-09 55 views
0

JSONファイルから情報を取得しようとしているときにエラーが発生しました。私は 'NAME'、 'YEAR'などの '投稿'からデータを取得してログに出力しようとしています。それは私にorg.json.JSONException: No value for NAMEを伝え続けます。誰かが私を正しい方向に向けることができますか?JSON org.json.JSONException: "NAME"の値がありません

JSON例:

{"posts":[ 
{"post":{"ID":"74", 
    "TOURN_ID":"999", 
    "YEAR":"2016", 
    "START_DATE":"2016-09-07", 
    "END_DATE":"2016-09-18", 
    "DATE_STRING":"September 7th - 18th 2016", 
    "NAME":"2016 Paralympic Games", 
    "ShortName":"2016 Paralympic Games", 
    "TOURN_TYPE":"International"}}, 

{"post":{"ID":"73", 
    "TOURN_ID":"999", 
    "YEAR":"2016", 
    "START_DATE":"2016-06-23", 
    "END_DATE":"2016-06-25", 
    "DATE_STRING":"June 22nd - 23rd 2016", 
    "NAME":"2016 USABA National Goalball Championships", 
    "ShortName":"2016 US Nationals", 
    "TOURN_TYPE":"Domestic"}}, 

{"post":{"ID":"72", 
    "TOURN_ID":"999", 
    "YEAR":"2016", 
    "START_DATE":"2016-05-12", 
    "END_DATE":"2016-05-14", 
    "DATE_STRING":"May 12th-14th 2016", 
    "NAME":"2016 USABA Western Regional Goalball Tournament", 
    "ShortName":"2016 Utah", 
    "TOURN_TYPE":"Domestic"}} 
]} 
ここ

は私のJavaのである:あなたが証明してきたように、

Log.i("Name of Tournament", jsonPart.getString("NAME")); 
+0

ダウン

JSONObject jsonObjectPost = jsonPart.getObject("post"); 

別のレベルを操作する必要があります。 toudnInfo行を削除します.---編集します。申し訳ありませんが、実際には:JSONObject jsonPart = arr.getJSONObject(i).getJSONObject( "post"); – Guardanis

答えて

1

これは動作します:

protected void onPostExecute(String result) { 
    super.onPostExecute(result); 

    try { 
     JSONObject jsonObject = new JSONObject(result); 

     String tournInfo = jsonObject.getString("posts"); 

     Log.i("Tourn Info", tournInfo); // displays correctly 

     JSONArray arr = new JSONArray(tournInfo); 

     for(int i = 0; i < arr.length(); i++){ 


      JSONObject jsonPart = arr.getJSONObject(i); 

      String name = jsonPart.optString("NAME"); 

      Log.i("Each Tournament Object", jsonPart.getString("post"));// Work correctly displays all the 'post' items 

私はエラーを取得する場所です

Log.i("Each Tournament Object", jsonPart.getString("post")); 

これは、jsonPartオブジェクトを取得すると、最初のレベルが「投稿」オブジェクト(重複している)であることを意味します。だから、JSONArray ARR =新しいJSONArray(jsonObject.getJSONArray( "投稿"))、その後

Log.i("Name of Tournament", jsonObjectPost.getString("NAME")); 
+0

それはうまくいった!どうもありがとうございました! – Tornado973

関連する問題