티스토리 뷰

안드로이드에서 웹서버로 통신할 때 주로 사용하는 포맷이 JSON이다. 

웹에 접속해서 데이터를 가져오는 방식은 안드로이드 네트워크 연결하기 (Network On Main Thread Exception 처리) 을 참고하기 바란다. 

이렇게 가져온 데이터가 JSON 타입일 경우, 안드로이드에서 이를 처리해서 배열에 저장해 보자. 


웹에서 가져온 데이터를 JSONArray로 변환하고, For문을 중첩해서 돌리면서 각 항목의 값을 가져오는 것이다. 

그리고 String[][] 2차원 배열에 가져온 값을 저장하는 형태로 매우 간단하다. 

소스를 한번 살펴보자. 


2번째 줄에서 매개변수로 넘어온 result라는 문자열을 JSONArray 타입으로 변환한다. 

8-15째 줄에서 JSONArray의 값을 읽어와 2차원 String 배열에 저장하고 있다. 


마지막으로 LogCat을 이용해 결과를 확인하기 위해 Log.i() 함수로 저장된 값을 출력한다. 


실제 안드로이드 프로젝트에서 테스트해보려면 

위 소스를 안드로이드 네트워크 연결하기 (Network On Main Thread Exception 처리)의 

전체 소스에서 67-68 줄 사이(onPostExecute 메소드)에 넣고 돌려보기 바란다. 


다음과 같은 결과를 얻을 수 있을 것이다. 



참고로 JSON 변환을 하다보면, 다음과 같은 에러메시지를 만날 때가 있다. 

org.json.JSONArray cannot be converted to JSONObject


JSONArray 타입을 JSONObject로 변환할 수 없다는 것으로 두 타입의 차이를 조금 이해할 필요가 있다. 

JSONObject는 {이름:값, 이름:값 ... }로 구성된 하나의 JSON 객체를 나타낸다. 

반면 JSONArray는 [{이름:값, 이름:값 ...}, {이름:값, 이름:값 ...}, {이름:값, 이름:값 ...}, ... ]와 같이 JSONObject가 여러개 중첩되어 있는 것이다. 

이 차이를 안다면 데이터 문자열의 형태에 따라 JSONObject나 JSONArray로 변환함으로써 위와 같은 오류를 만들지는 않을 수 있을 것이다. 

댓글
댓글쓰기 폼