행복한 하루
안드로이드 JSON response 가 배열로 바로 넘어오는 경우 본문
안녕하세요.
오늘은 안드로이드에서 배열 타입으로 된 JSON 코드를 분리하는 간단한 팁을 공유해 드립니다
기본적으로 JSON으로 구조가 되어있다면 배열이라고 해도 key 값이 있고 안에 배열 구조로 되어 있습니다.
예제 1)
{
"jaw": [
[
0.39988815155929,
0.4597163545375075
],
[
0.40076365725357194,
0.4919288974017492
],
...
}
그런데 가끔 key가 없이 바로 배열로 나오는 경우가 있습니다. 그럴 때는 어떻게 해야 할까요?
예제 2)
[{"code":"FRX.KRWUSD","currencyCode":"USD","currencyName":"달러","country":"미국","name":"미국 (KRW/USD)","date":"2020-09-25","time":"20:05:22","recurrenceCount":232,"basePrice":1175.00,"openingPrice":1170.30,"highPrice":1175.00,"lowPrice":1168.70,"change":"RISE","changePrice":2.50,"cashBuyingPrice":1195.56,"cashSellingPrice":1154.44,"ttBuyingPrice":1163.50,"ttSellingPrice":1186.50, ... }]
첫 번째 예제 시작이 { 로 해서 key가 “jaw” 나오고 값으로 배열[] 구조가 시작하고 있습니다.
그러나 두 번째 시작은 { 이후 바로 배열[]로 나오기 때문에 조금 다르게 코딩을 해야 합니다.
받은 문자열을 바로 배열 구조체 생성에 인자로 넣어 배열로 해석하면 됩니다.
JSONArray exchangeArray = new JSONArray(jsonString);
아래 예제에서는 한 개의 배열로 만들었지만, 배열구조로 여러 개가 있다면, 배열을 카운트하면서 읽어 내면 배열의 속성을 읽을 수 있습니다. length()를 호출하면 배열을 읽어 들은 배열이 있다면 몇 개가 있는지 알 수 있고 for 문 등으로 사용할 수 있습니다.
for( int iCount = 0; iCount < exchangeArray.length() ; iCount ++ )
...
JSONArrary로 생성 이후는 JSONObject로 하나씩 받아 드려서 킷값으로 하나씩 읽어 드리면 됩니다. '0'은 현재 예제에서 배열이 하나로만 되어 있어서 첫 번째 배열이라고 정적으로 입력하였습니다. 배열이 여러 개 가 있다면 iCount처럼 변수를 대입해주면 됩니다.
JSONObject exchangeObject = exchangeArray.getJSONObject(0);
샘플로 파싱 하는 예제입니다.
public static ArrayList<String> exchangeJsonParser(String jsonString) {
ArrayList<String> resultData = new ArrayList<>();
try {
JSONArray exchangeArray = new JSONArray(jsonString);
JSONObject exchangeObject = exchangeArray.getJSONObject(0);
resultData.add(exchangeObject.getString("basePrice"));
resultData.add(exchangeObject.getString("cashBuyingPrice"));
resultData.add(exchangeObject.getString("cashSellingPrice"));
resultData.add(exchangeObject.getString("ttBuyingPrice"));
resultData.add(exchangeObject.getString("ttSellingPrice"));
resultData.add(exchangeObject.getString("modifiedAt"));
} catch(JSONException e){
e.printStackTrace();
}
return resultData;
}
킷값 없이 바로 배열로 넘어오는 JSON이 있다면 JSONArrary 배열에 바로 넣어 해석하면 해결할 수 있습니다.
감사합니다.
'Android > 안드로이드 프로그래밍' 카테고리의 다른 글
com.google.firebase.FirebaseException: An internal error has occurred. [ API key not valid. Please pass a valid API key. ] 해결방법(Solved) (0) | 2020.10.11 |
---|---|
안드로이드 PreferenceScreen 사용 방법(설정 창) (0) | 2020.09.28 |
[앱 업데이트] DailyEng v1.3.9 – 날짜이동 기능 추가 (20.09.20) (0) | 2020.09.20 |
플래그먼트 갱신,새로고침 하는 방법 (fragment refresh) (0) | 2020.09.02 |
[앱 업데이트]KNOW PICTURE v1.4.5 - 사진에서 문자 추출(OCR) (0) | 2020.08.27 |