2017-02-21 3 views
1

연락처가 JSON 형식입니다. 이제 문자열 배열로 디코드하려고합니다. 두 개의 배열이 있습니다. namesphones. 이 코드를 사용하고 있습니다 :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이고 phones[0]911으로 할당되어 있습니다.이 번호는 이름에 해당하는 첫 번째 전화 번호입니다. 나는 그것을 어떻게 할 수 있는가, 나는 안드로이드에서 새로운가?

+1

새로운 JSONObject (jsonArray.toString())는 무엇을 달성해야합니까?! – Biffen

+0

배열 내에 객체가 있다고 생각합니다. 그래서 이들을 검색하려고합니다. 세 가지 물체가있는 것처럼 그렇지 않습니까? –

+0

당신은 그것을 통해 반복하여 각 객체를 가져와야 만합니다. 단지 그것을 얻을 수는 없습니다. – Prashant

답변

2

문제는 당신이 어떤 당신이 할 수없는, JSONObjectJSONArray을 변환하려고

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

이 라인에있다. 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 개체로 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는 가변 크기의 데이터를 저장할 수 있거나 크기를 고정 할 필요가 없습니다.