Notice
Recent Posts
Recent Comments
Link
투케이2K
554. (Android/Java) [유틸 파일] jsonArrayKeySort : jsonArray jsonObject 형식 데이터 특정 key 값 기준 정렬 (sort) 수행 본문
Android
554. (Android/Java) [유틸 파일] jsonArrayKeySort : jsonArray jsonObject 형식 데이터 특정 key 값 기준 정렬 (sort) 수행
투케이2K 2023. 4. 25. 21:45[개발 환경 설정]
개발 툴 : AndroidStudio
개발 언어 : Java
[소스 코드]
// -----------------------------------------------------------------------------------------
// TODO [SEARCH FAST] : [RETURN] jsonArrayKeySort : jsonArray jsonObject 형식 데이터 특정 key 값 기준 정렬 수행
// -----------------------------------------------------------------------------------------
public static JSONArray jsonArrayKeySort (JSONArray jsonArray, String key) {
/**
* // -----------------------------------------
* [jsonArrayKeySort 메소드 설명]
* // -----------------------------------------
* 1. jsonArray jsonObject 형식 데이터 특정 key 값 기준 정렬 수행
* // -----------------------------------------
* 2. 호출 방식 :
*
* String sample = "[{\"key_1\":\"value_1\",\"step\":1},{\"key_3\":\"value_3\",\"step\":3},{\"key_10\":\"value_10\",\"step\":10},{\"key_2\":\"value_2\",\"step\":2}]";
*
* C_Util.jsonArrayKeySort(new JSONArray(sample), "step");
*
* // -----------------------------------------
* 3. 리턴 데이터 : 특정 key 값 기준으로 정렬된 데이터
*
* [{"key_1":"value_1","step":1},{"key_2":"value_2","step":2},{"key_3":"value_3","step":3},{"key_10":"value_10","step":10}]
* // -----------------------------------------
* */
// [리턴 데이터 선언 실시]
JSONArray returnData = new JSONArray();
// [로직 처리 수행 실시]
try {
// [사전 인풋 데이터 널 체크 실시]
if (jsonArray != null && jsonArray.length() > 0
&& jsonArray.toString().contains(key) == true){ // [널이 아니고, key 값을 포함하는 경우]
// [1]. [jsonArray >> List 변환 실시]
List<JSONObject> copyList = new ArrayList<JSONObject>();
for (int i=0; i<jsonArray.length(); i++){
copyList.add(jsonArray.getJSONObject(i)); // list 에 삽입 실시
}
// [2]. [Collections 을 사용해서 List 배열 데이터 정렬 실시]
Collections.sort( copyList , new Comparator<JSONObject>() {
@Override
public int compare(JSONObject a, JSONObject b) {
// TODO [value 변수 선언]
String value_A = "";
String value_B = "";
try {
// TODO [value 기준 정렬]
value_A = String.valueOf(a.get(key)); // [정렬하려는 key 지정]
value_B = String.valueOf(b.get(key)); // [정렬하려는 key 지정]
}
catch (JSONException e) {
e.printStackTrace();
}
// TODO [value 기준 정렬]
if (C_Util.stringIsNumber(value_A) == true && C_Util.stringIsNumber(value_B) == true){
return Integer.compare(Integer.parseInt(value_A), Integer.parseInt(value_B)); // [integer]
}
else {
return value_A.compareTo(value_B); // [string]
}
}
});
// [3]. [정렬된 List 를 다시 jsonArray 에 담기 실시]
returnData = new JSONArray(copyList);
}
}
catch (Exception e){
e.printStackTrace();
}
// [로그 출력]
// ===============================================================
S_Log._D_("jsonArrayKeySort :: jsonArray jsonObject 형식 데이터 특정 key 값 기준 정렬 수행", new String[]{
"INPUT [JSON] :: " + String.valueOf(jsonArray),
"INPUT [KEY] :: " + String.valueOf(key),
"RETURN :: " + String.valueOf(returnData)
});
// ===============================================================
// [리턴 데이터 반환 실시]
return returnData;
}
반응형
'Android' 카테고리의 다른 글
Comments