[안드로이드]키 없는 JSON 파싱하는 법

프로그래밍/Android 관련2017. 12. 12. 15:40

안녕하세요. 개발자 드리머즈입니다.


키 없는 JSON 구조에 대해 파싱하는 법에 대한 자료남깁니다.


key가 없는 JSON이란 아래와 같습니다.

[
"1",
"서버 정상"
]

이와 반대로 key가 있는 JSON 구조는 아래와 같습니다.
{
"status": "1",
"msg": "서버 정상"
}


제가 관리하는 php서버에서 보내주는 JSON 값입니다.
iOS에서는 key가 없는 JSON을 SwiftyJSON을 이용하면.. 문제 없이 parsing이 가능했기에
Android에서도 쉽게 파싱할 수 있을 거라고 생각했습니다.

그래서 먼저 Android에서 기본적으로 지원하는 JSONObject를 이용해서 파싱을 해보려고 했습니다.
(responseData에 서버로부터 받아온 key가 없는 JSON값이 있음)

JSONObject json_obj= null;
try {
json_obj = new JSONObject(responseData);

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


그랬더니.. 아래와 같은 에러가 발생했습니다.
org.json.JSONException: Value ["1","서버 정상"] of type org.json.JSONArray cannot be converted to JSONObject

안드로이드 디벨로퍼 공식홈에 따르면, JSONObject는
A modifiable set of name/value mappings.

그래서 format에 맞지 않아 파싱이 안되고 exception을 발생시킨 것 같습니다.


서버에서 보내주는 JSON구조를 바꿔야하나 고민을 하다가.. JSONObject가 아닌 JSONArray를 사용해봐야 겠다고 생각했습니다.

JSONArray json_array = null;
try {
json_array = new JSONArray(responseData);

Log.d("test", "json_array.get(0) = " + json_array.get(0));
Log.d("test", "json_array.get(1) = " + json_array.get(1));
} catch (JSONException e) {
e.printStackTrace();
}

위와 같이 코드 작성 후 로그를 확인해보니


D/test: json_array.get(0) = 1
D/test: json_array.get(1) = 서버 정상

위처럼 제대로 나옵니다.

key가 없는 JSON 구조의 경우에는 간단하게 JSONArray를 이용해서 파싱하면 될 것 같습니다.



작성자

Posted by 드리머즈

관련 글

댓글 영역