Computer >> 컴퓨터 >  >> 프로그래밍 >> Java

Java에서 JSONObject를 내림차순으로 정렬하는 방법

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.pwds2.pwd의 순서만 바꿔주면 됩니다.