2016-10-17 5 views
0

アプリでは、有効な文法とキーを使用して正しく解析されるJSONフィードがいくつかあります。私が代わりにJSONArrayを使用してみましたこのJSONレスポンスの繰り返し/構文解析

{ 
"10":["111","aaa","bbb","213sdg","1.0","-0.343"], 
"20":["111","aaa","bbb","213sdg","1.0","-0.343"], 
"30":["111","aaa","bbb","213sdg","1.0","-0.343"], 
"40":["111","aaa","bbb","213sdg","1.0","-0.343"], 
"50":["111","aaa","bbb","213sdg","1.0","-0.343"] 
} 

try { 

    JSONObject jsonObj = new JSONObject(response); 
    if(jsonObj.length() > 0){ 
     Iterator keys = jsonObj.keys(); 
     while (keys.hasNext()) { 
      String key = (String) keys.next(); 
      JSONObject obj = (JSONObject) jsonObj.get(key); 

      String myString = obj.get("fieldname").toString(); 

      ... 
     } 
    } 
} catch(e) { 
    ... 
} 

しかし、私は1つのJSONフィードが若干異なる解析する必要があり、次のようなスタイルです:私は、次のような方法論を使用しますJSONObjectですが、フィードにフィールド名/キーがない場合は、フィールド名/キーを要求するためのtry {}句がエラーをキャッチしています。

フィード出力を変更せずに、このスタイルフィードを繰り返し処理する簡単な方法はありますか?多くのおかげで

EDIT:変更JSONオブジェクトのキーは、私が実際に

+0

jsonには1つのJsonObjectしかありません。 whileループで2番目のjsonObjectを使用するのはなぜですか? –

+0

投稿したJSONにそのコードは適用されません。 2番目のobjは "行"のJSONObjectを取得して解析し、その行のフィールド値を取得することでした。 – Jammo

+0

行にjsonオブジェクトがありません。あなたの配列は単に文字列を含んでいます –

答えて

0

このコード[OK]を

try{ 
    JSONObject jObject = new JSONObject(yourStringFromYourQuestion); 

    // To get one specific element: 
    JSONObject w1 = jObject.getJSONObject("10"); 
    JSONObject w2 = jObject.getJSONObject("20"); 

    // Iterate over all elements 
    Iterator<?> keys = jObject.keys(); 
    while(keys.hasNext()) { 
    String key = (String)keys.next(); // "10", etc 
    if (jObject.get(key) instanceof JSONObject) { 

    try { 
    // jsonString is a string variable that holds the JSON 
    JSONArray itemArray=jObject.getJSONArray(key); 
    for (int i = 0; i < itemArray.length(); i++) { 
    int value=itemArray.getInt(i); 
    Log.e("json", i+"="+value); 
    } 
    } catch (JSONException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
    } 
    } 
} 
} catch (JSONException e){ 
    Log.e(LOG_TAG, "Failure converting JSON String", e); 
    } 
+0

返事をありがとう。しかし、あなたの 'String score = entry.optString(" score "、" ");はキーでマッピングされたフィールドを持つJSON、例えば" score ":" 123 "、" alive ":" yes "などに依存します。 '。私はキーとのマッピングを持っていません – Jammo

+0

更新されたコードを確認してください –

+0

ありがとう。うん、それは意味をなさない。これはかなり大きなJSONダウンロードであるため、ダウンロード時間を最小限に抑えるためにフィールド名は省略されています。キーがなくなった私の元のコードはJSONArrayオブジェクトで解析できませんか? – Jammo

0

試し異なる番号を使用していることを示すために、私は思ったよりも簡単でした。各行をJSONArrayとして参照し、列インデックスを使用して解析してください:

try { 

    JSONObject jsonObj = new JSONObject(response); 
    if(jsonObj.length() > 0){ 
     Iterator keys = jsonObj.keys(); 
     while (keys.hasNext()) { 
      String key = (String) keys.next(); 
      JSONArray rowArr = jsonObj.getJSONArray(key); 

      String fieldone = rowArr.getString(0); 
      String fieldtwo = rowArr.getString(1);   

      ... 
     } 
    } 
} catch(e) { 
    ... 
} 

入力いただきありがとうございます。