2017-02-21 10 views
1

私はJSON形式の連絡先を持っています。今私はそれらを文字列配列にデコードしたいと思います。 2つの配列があります。 namesおよびphones。私はこのコードを使用しています:AndroidでJSON文字列をデコードする

String[] names; 
    String[] phones; 

    String test = "[{\"name\":\"A\",\"phone\":\"911\"},{\"name\":\"A1\",\"phone\":\"911\"},{\"name\":\"Abid\",\"phone\":\"371812\"}]"; 
    try { 
     JSONArray jsonArray = new JSONArray(test); 
     JSONObject jsonObject = new JSONObject(jsonArray.toString()); 
     Log.i("INFO", String.valueOf(jsonObject.length())); 
    } catch (JSONException e) { 
     e.printStackTrace(); 
    } 

これはエラーを生成します。 namesの配列にすべての名前を追加し、すべての電話をphones配列に追加するにはどうすればよいですか。 names[0]には、ファーストネームであるAが割り当てられ、ファーストネームに対応する最初の電話番号である911が割り当てられたphones[0]が割り当てられます。どうすればいいのですか、私はアンドロイドで新しいですか?

+1

「新しいJSONObject(jsonArray.toString())」とは何ですか? – Biffen

+0

配列内にオブジェクトがあると思うので、これらを取得しようとします。 3つのオブジェクトがあるように、そうではありませんか? –

+0

それぞれのオブジェクトをフェッチする必要があります。単純にそのようにすることはできません。 – Prashant

答えて

2

問題は、あなたはどのあなたができない、JSONObjectJSONArrayを変換しようとしている

JSONObject jsonObject = new JSONObject(jsonArray.toString()); 

この行です。 JSONObjectJSONArrayにアクセスしたい場合は、それぞれをループするか、インデックスで特定のオブジェクトを取得する必要があります。

String[] names; 
    String[] phones; 

    String test = "[{\"name\":\"A\",\"phone\":\"911\"},{\"name\":\"A1\",\"phone\":\"911\"},{\"name\":\"Abid\",\"phone\":\"371812\"}]"; 
    try { 
     JSONArray jsonArray = new JSONArray(test); 
     phones = names = new String[jsonArray.length()]; 
     for(int i = 0 ; i < jsonArray.length(); i ++){ 
      JSONObject jsonObject = jsonArray.getJSONObject(i); 
      names[i] = jsonObject.getString("name"); 
      phones[i] = jsonObject.getString("phone"); 
      Log.i("INFO", "name : " + jsonObject.getString("name") + " , phone : " + jsonObject.getString("phone")); 

     } 
    } catch (JSONException e) { 
     e.printStackTrace(); 
    } 
+0

この回答は完璧に見えます。 –

1

あなたはそのようなJSONオブジェクトにJSONのarryaを変換することはできません。ここに

try { 
     JSONArray jsonArray = new JSONArray(test); 
     for(int i=0; i<jsonArray.length(); i++) { 
      JSONObject jsonObject = jsonArray.getJSONObject(i); 
      // Your code goes here.. 
     } 

    } catch (JSONException e) { 
     e.printStackTrace(); 
    } 
+0

私の過ちは、私の更新された答えを確認してください – Piyush

0

は、必要なコードです。

ArrayList<String> names = new ArrayList<>(); 
    ArrayList<String> phones = new ArrayList<>(); 

    String test = "[{\"name\":\"A\",\"phone\":\"911\"},{\"name\":\"A1\",\"phone\":\"911\"},{\"name\":\"Abid\",\"phone\":\"371812\"}]"; 
    try { 
     JSONArray jsonArray = new JSONArray(test); 
     for (int i = 0; i < jsonArray.length(); i++) { 
      JSONObject jsonObject = jsonArray.getJSONObject(i); 
      String name = jsonObject.getString("name"); 
      String phone = jsonObject.getString("phone"); 
      names.add(name); 
      phones.add(phone); 
      Log.i("INFO", name + ", " + phone); 
     } 
    } catch (JSONException e) { 
     e.printStackTrace(); 
    } 

上記の単純な配列を使用すると、固定サイズのデータ​​のみを保存できます。しかし、arrayListとListは可変サイズのデータ​​を格納することができますが、サイズを固定する必要はありません。

関連する問題