JSONObject는 java.util.HashMap의 하위 클래스로, 저장된 요소들의 순서가 보장되지 않습니다. 만약 요소의 순서를 엄격하게 유지해야 한다면 java.util.LinkedHashMap을 활용한 JSONValue.toJSONString(map) 메서드를 사용하면 됩니다.
이 글에서는 Java에서 JSON 객체를 인코딩하는 두 가지 대표적인 방법을 예제와 함께 살펴보겠습니다.
예제 1: HashMap을 이용한 JSON 객체 인코딩
첫 번째 방법은 HashMap에 데이터를 담은 후 JSONObject로 변환하는 방식입니다.
import java.util.*;
import org.json.simple.JSONObject;
public class JSONEncodingTest {
public static void main(String[] args) {
Map<Object, Object> dataMap = new HashMap<Object, Object>();
dataMap.put("Name", "Adithya");
dataMap.put("Age", new Integer(25));
dataMap.put("Salary", new Double(25000.00));
dataMap.put("Employee Id", new Integer(115));
dataMap.put("Company", "TutorialsPoint");
JSONObject jsonObj = new JSONObject(dataMap);
System.out.print("Encoding a JSON object: ");
System.out.print(jsonObj);
}
}실행 결과
Encoding a JSON object: {"Salary":25000.0,"Employee id":115,"Company":"TutorialsPoint","Age":25,"Name":"Adithya"}출력 결과에서 확인할 수 있듯이, HashMap은 내부적으로 해시 알고리즘을 사용하기 때문에 데이터를 입력한 순서와 출력 순서가 다르게 나타납니다.
예제 2: StringWriter를 이용한 JSON 문자열 생성
두 번째 방법은 writeJSONString() 메서드와 StringWriter를 조합하여 JSON 객체를 문자열로 직접 작성하는 방식입니다.
import java.io.*;
import org.json.simple.*;
public class JSONEncodingTest1 {
public static void main(String[] args) throws IOException {
JSONObject obj = new JSONObject();
obj.put("Name", "Jai");
obj.put("Mobile_Number", new Integer(995998480));
obj.put("Bank_Balance", new Double(50000.00));
obj.put("Is_A_SelfEmployee", new Boolean(false));
StringWriter out = new StringWriter();
obj.writeJSONString(out);
String jsonText = out.toString();
System.out.print(jsonText);
}
}실행 결과
{"Is_A_SelfEmployee":false,"Bank_Balance":50000.0,"Mobile_Number":995998480,"Name":"Jai"}정리
Java에서 JSON 객체를 인코딩하는 방법은 크게 두 가지입니다. 첫째, HashMap에 데이터를 저장한 뒤 JSONObject 생성자에 전달하는 방법이고, 둘째, JSONObject에 직접 데이터를 넣고 writeJSONString() 메서드로 문자열을 추출하는 방법입니다. 요소의 순서가 중요하다면 LinkedHashMap과 JSONValue.toJSONString(map) 메서드를 함께 사용하는 것이 좋습니다.