본문 바로가기

Java

JAVA JSON value sort / 자바 제이슨 값 정렬

JAVA에서 JSON값을 정렬하기 위해선 몇 가지의 개념을 알아야 한다.

 

1. JAVA에서 제공하는 Collections메소드 sort()와 Comparator 클래스

    

2. JAVA에서 제공하는 String 메소드 compare(), compareTo()

    

3. JAVA 문법 override

    override(오버라이드)란

    기존에 존재하는 클래스를 상속 받아 필드나 메소드를 재정의 하는 것을 말한다.

    클래스와 상속 정리 링크

4. JSON 라이브러리를 이용한 JSONObject, JSONArray 객체 활용

    JSONObject객체는 JSON에서 object를 만드는 객체이다.

  JSONObject 객체 활용 예시

    JSONObject jsonObj = new JSONObject();
    jsonObj.put( "key" , "value");
    System.out.println(jsonObj.toString);

  출력 결과 : { "key" : "value" }

 

 

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

import net.sf.json.JSONArray;
import net.sf.json.JSONException;
import net.sf.json.JSONObject;

JSONArray jsonArray = new JSONArray();

for (int i = 1; i < 10; i++) {
	JSONObject jsonObj = new JSONObject();
	jsonObj.put("number", i);
	jsonObj.put("name", "amor_dev");
	jsonArray.add(jsonObj);
}

JSONArray sortedJsonArray = new JSONArray();

List<JSONObject> jsonValues = new ArrayList<JSONObject>();
for (int i = 0; i < jsonArray.size(); i++) {                   //동적 배열 size(), 정적 배열 length()
	jsonValues.add(jsonArray.getJSONObject(i));
	System.out.println(i+""+jsonArray.getJSONObject(i));
}
Collections.sort( jsonValues, new Comparator<JSONObject>() {
	private static final String KEY_NUM = "Number";             //JSON key 변수 선언 생성
	@Override
	public int compare(JSONObject a, JSONObject b) {
		int valA = 0;
		int valB = 0;
            //값이 문자열 일 때
            //String valA = "";
            //String valA = "";
		try {
			valA = Integer.parseInt(a.getString(KEY_NUM));
			valB = Integer.parseInt(b.getString(KEY_NUM));
            
                //값이 문자열 일 때
                //valA = (String) a.get(KEY_NUM);
                //valB = (String) b.get(KEY_NUM);
		}
		catch (JSONException e) {
			e.printStackTrace();
		}
		return Integer.compare(valA,valB);
            //값이 문자열 일 때
            //return valA.compareTo(valB);
	}
});
for (int i = 0; i < jsonArray.size(); i++) {
	sortedJsonArray.add(jsonValues.get(i));
}

 

sortedJsonArray안에 정렬된 JSON 값이 들어 있는 것을 확인할 수 있다.

위 코드와 같이 해도 되고 JSON의 key 값과 value값을 받는 클레스를 만들어서 사용할 수도 있다.