행복한 하루

안드로이드 JSON response 가 배열로 바로 넘어오는 경우 본문

Android/안드로이드 프로그래밍

안드로이드 JSON response 가 배열로 바로 넘어오는 경우

변화의 물결 2020. 9. 27. 00:06

 

 

안녕하세요.

 

  오늘은 안드로이드에서 배열 타입으로 된 JSON 코드를 분리하는 간단한 팁을 공유해 드립니다

기본적으로 JSON으로 구조가 되어있다면 배열이라고 해도 key 값이 있고 안에 배열 구조로 되어 있습니다.

예제 1) 

{

"jaw": [

[

0.39988815155929,

0.4597163545375075

],

[

0.40076365725357194,

0.4919288974017492

],

...

}

예제 1

 그런데 가끔 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 배열에 바로 넣어 해석하면 해결할 수 있습니다.

 

감사합니다.

 

 

Comments