2017-02-21 2 views
1

У меня есть контакты, которые находятся в форме JSON. Теперь я хочу их декодировать в массив String. Существует два массива; names и phones. Я использую этот код:Декодирование JSON String в Android

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, который является первым именем и phones[0] присвоен 911, который является первым номером телефона, соответствующим названию. Как я могу это сделать, я новичок в андроиде?

+1

Что нового в JSONObject (jsonArray.toString())? – Biffen

+0

Я думаю, что есть объекты внутри массива. Итак, я пытаюсь их восстановить. Как есть три объекта, не так ли? –

+0

вам нужно получить каждый объект, пробив его, вы не можете просто получить его так: – Prashant

ответ

2

Проблема заключается в этой строке

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

вы пытаетесь конвертировать JSONArray в JSONObject, который вы не можете. если вы хотите получить доступ к JSONObject внутри JSONArray, вам нужно пройти через каждый, или вы можете получить конкретный объект по его индексу.

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 arrya в объект JSON как это:

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 могут хранить данные переменного размера или вам не нужно фиксировать их размер.

Смежные вопросы