2016-11-26 11 views
1

JSONファイルから複数のデータセットを使用してデータを取得することができません。複数の配列オブジェクトを使用してJSONデータにアクセスする方法:android

{"status":"ok","count":3,"count_total":661,"pages":133,"posts": 
[{"id":20038,"type":"post","slug":"xperia-launcher-download","url":"http:\/\/missingtricks.net\/xperia-launcher-download\/","status":"publish","title":"Download Xperia Launcher app for Android (Latest Version)", 
{"id":94,"type":"post","slug":"top-free-calling-apps-of-2014-year","url":"http:\/\/missingtricks.net\/top-free-calling-apps-of-2014-year\/","status":"publish","title":"Best Free Calling Apps for Android November 2014", 
{"id":98,"type":"post","slug":"top-free-calling-apps-of-2016-year" "url":"http:\/\/missingtricks.net\/top-free-calling-apps-of-2016-year\/","status":"publish","title":"Best Free Calling Apps for Android December 2016"}]} 

上記のJSONファイルからタイトル、URL、ステータスにアクセスする必要があります。

@Override 
    protected void onPostExecute(String result) { 
     //this method will be running on UI thread 

     pdLoading.dismiss(); 
     List<DataFish> data = new ArrayList<>(); 
     pdLoading.dismiss(); 
     try { 
      JSONArray jArray = new JSONArray(result); 
      // Extract data from json and store into ArrayList as class objects 
      for (int i = 0; i < jArray.length(); i++) { 
       JSONObject json_data = jArray.getJSONObject(i); 
       DataFish fishData = new DataFish(); 
       fishData.status = json_data.getString("status");     
       fishData.title = json_data.getString("url");     
       fishData.sizeName = json_data.getString("title"); 
       data.add(fishData); 
      } 
     } catch (JSONException e) { 
      Toast.makeText(JSonActivity.this, e.toString(), Toast.LENGTH_LONG).show(); 
      Log.d("Json","Exception = "+e.toString()); 
     } 
    } 

私は上記のコードでJSONExceptionを取得しています。

JSONファイルのタイトル、ステータス、およびURLにアクセスするにはどうすればよいですか?

+1

応答は正しいjson形式ではありません – Nithinlal

+0

@Nithinlal私は同じことを指していました –

答えて

2

あなたのJSONArrayJSONObject内でフェッチ、そうJSONObjectを作成し、インデックス「ポスト」

1を使用して配列をフェッチする必要がある)resultはそうJSONObject

2を作成JSONObjectです。 )インデックスを通してそれをフェッチすることによって、「投稿」

3)今、単純にトラバース配列オブジェクトとしてインデックス値を使用してJSONArrayを取得

 JSONObject jObj = new JSONObject(result); 
     JSONArray jArray = jObj.getJSONArray("posts"); 

     // Extract data from json and store into ArrayList as class objects 
     for (int i = 0; i < jArray.length(); i++) { 
      JSONObject json_data = jArray.getJSONObject(i); 


      DataFish fishData = new DataFish(); 
      fishData.status = json_data.getString("status"); 

      fishData.title = json_data.getString("url"); 

      fishData.sizeName = json_data.getString("title"); 


      data.add(fishData); 
     } 

注:私はあなたのJSONオブジェクトが,}ないで終わる必要がありますけれども、それは短いバージョンとサンプル応答で天気を知りません。

[{ "ID":20038、 "タイプ": "ポスト"、 "スラッグ": "XPERIA-ランチャー・ダウンロード"、 "URL": "http://missingtricks.net/xperia-launcher -download/" "ステータス": "公開"、 "タイトル": " ":94" Android用 のXperiaランチャーアプリ(最新版)"、

// ^^^ there should be a } not a , to end json 
// so make sure to do the correction so it will look like => ...st Version)"}, 

{" IDをダウンロード「タイプ」:「投稿」、「スラッグ」:「2014年の無料通話アプリ」、「url」:「http://missingtricks.net/top-free-calling-apps-of- 2014年/ "、"ステータス ":"公開 "、"タイトル ":"最高 Android用無料アプリ2014年11月 "、]

改良:

キーマップが存在しない場合はnullまたは文字列以外の値を避けるためにoptStringを使用することができます

これは、2つのバリエーション

があり

オプションの文字列を取得します。キーに関連付けられています。このようなキーがない場合は defaultValueを返します。

fishData.status = json_data.optString("status","N/A"); 
// will return "N/A" if no key found 

public String optString(String key, String defaultValue) { 
または見つかりませキーは、単にあなたのJSON hereを検証することができ

fishData.status = json_data.optString("status"); 
// will return "" if no key found where "" is an empty string 
+1

getStringではなくoptStringを使用しています。ヌルポイント例外を回避します。 – Nithinlal

+0

@Nithinlalええ、私はみんなに与えるアドバイスです。これを指摘する古い投稿のために:) thanks –

+1

これは動作しています! –

1

を使用しない場合は、空の文字列を取得します。

JSON getJsonObject()が機能しない場合は、JSONオブジェクト&を複数の配列で解析して使用する必要があります。

関連する問題