JSONObject는 키(key)와 값(value) 쌍으로 이루어진 순서가 없는(unordered) 컬렉션입니다. 값의 타입은 Boolean, JSONArray, JSONObject, Number, String 등이 될 수 있습니다.
JSONObject의 생성자는 외부 형태의 JSON 텍스트를 내부 형태로 변환하는 데 사용되며, 이렇게 변환된 값은 get()과 opt() 메서드로 읽어올 수 있습니다. 반대로 put()과 toString() 메서드를 사용하면 값을 JSON 텍스트로 변환할 수도 있습니다.
JSONObject 자체는 순서를 보장하지 않기 때문에, 값을 정렬하려면 키와 값을 별도의 리스트로 옮긴 뒤 정렬해야 합니다. 아래 예제에서는 JSONObject의 값들을 내림차순으로 정렬하는 방법을 살펴보겠습니다.
예제 코드
import org.json.*;
import java.util.*;
public class JSonObjectSortingTest {
public static void main(String[] args) {
List<Student> list = new ArrayList<>();
try {
JSONObject jsonObj = new JSONObject();
jsonObj.put("Raja", 123);
jsonObj.put("Jai", 789);
jsonObj.put("Adithya", 456);
jsonObj.put("Ravi", 111);
Iterator<?> keys = jsonObj.keys();
Student student;
while(keys.hasNext()) {
String key = (String) keys.next();
student = new Student(key, jsonObj.optInt(key));
list.add(student);
}
// 값(pwd)을 기준으로 내림차순 정렬
Collections.sort(list, new Comparator<Student>() {
@Override
public int compare(Student s1, Student s2) {
return Integer.compare(s2.pwd, s1.pwd);
}
});
System.out.println("내림차순으로 정렬된 JSONObject의 값:");
for(Student s : list) {
System.out.println(s.pwd);
}
} catch(JSONException e) {
e.printStackTrace();
}
}
}
// Student 클래스
class Student {
String username;
int pwd;
Student(String username, int pwd) {
this.username = username;
this.pwd = pwd;
}
}코드 설명
위 코드의 동작 순서는 다음과 같습니다.
1. keys() 메서드로 JSONObject의 모든 키를 순회합니다.
2. 각 키와 optInt() 메서드로 가져온 값을 Student 객체에 담아 리스트에 추가합니다.
3. Collections.sort()와 Comparator를 사용해 pwd 값을 기준으로 내림차순 정렬합니다.
4. 정렬된 결과를 출력합니다.
실행 결과
내림차순으로 정렬된 JSONObject의 값: 789 456 123 111
이처럼 JSONObject는 기본적으로 순서를 유지하지 않지만, 키-값 쌍을 리스트로 추출한 후 Comparator를 활용하면 원하는 기준(오름차순 또는 내림차순)으로 손쉽게 정렬할 수 있습니다. 오름차순으로 정렬하고 싶다면 compare 메서드에서 s1.pwd와 s2.pwd의 순서만 바꿔주면 됩니다.