Flexjson은 Java 객체를 JSON 형식으로 직렬화하고, JSON 데이터를 다시 Java 객체로 역직렬화할 수 있는 경량 라이브러리입니다. 복잡한 설정이나 어노테이션 없이도 간결한 API만으로 객체를 JSON 문자열로 손쉽게 변환할 수 있다는 점이 가장 큰 장점입니다.
특히 Map 객체도 문제없이 직렬화할 수 있습니다. JSONSerializer 클래스의 serialize() 메서드를 호출하면 되는데, 이 메서드는 대상 인스턴스에 대해 얕은 직렬화(shallow serialization)를 수행합니다. 또한 prettyPrint(true) 옵션을 설정하면 들여쓰기가 적용된 읽기 편한 JSON 출력을 얻을 수 있습니다.
문법
public String serialize(Object target)
- target: JSON 문자열로 변환할 대상 객체 (Map 포함)
- 반환값: 직렬화된 JSON 형식의 문자열
Maven 의존성 추가
Flexjson을 프로젝트에서 사용하려면 먼저 pom.xml에 다음과 같이 의존성을 추가해야 합니다.
<dependency>
<groupId>net.sf.flexjson</groupId>
<artifactId>flexjson</artifactId>
<version>3.3</version>
</dependency>
예제
다음 예제에서는 HashMap에 문자열 값과 Student 객체를 함께 담은 뒤, JSONSerializer를 이용해 직렬화하는 과정을 보여줍니다.
import flexjson.JSONSerializer;
import java.util.*;
public class JsonSerializeMapTest {
public static void main(String[] args) {
JSONSerializer serializer = new JSONSerializer().prettyPrint(true);
Student student = new Student("Adithya", "Sai", 28, "Hyderabad");
Map<String, Object> map = new HashMap<String, Object>();
map.put("Student1", "Raja");
map.put("Student2", "Ravi");
map.put("my_student", student);
String jsonStr = serializer.serialize(map);
System.out.println(jsonStr);
}
}
// Student 클래스
class Student {
private String firstName;
private String lastName;
private int age;
private String address;
public Student() {}
public Student(String firstName, String lastName, int age, String address) {
super();
this.firstName = firstName;
this.lastName = lastName;
this.age = age;
this.address = address;
}
public String getFirstName() {
return firstName;
}
public String getLastName() {
return lastName;
}
public int getAge() {
return age;
}
public String getAddress() {
return address;
}
public String toString() {
return "Student[ " +
"firstName = " + firstName +
", lastName = " + lastName +
", age = " + age +
", address = " + address +" ]";
}
}
출력 결과
{
"my_student": {
"address": "Hyderabad",
"age": 28,
"class": "Student",
"firstName": "Adithya",
"lastName": "Sai"
},
"Student1": "Raja",
"Student2": "Ravi"
}
정리
Flexjson의 serialize() 메서드를 활용하면 Map에 담긴 키-값 쌍과 객체를 한 번에 JSON 형식으로 변환할 수 있습니다. 위 출력 결과에서 확인할 수 있듯이 Map의 각 엔트리는 JSON 객체의 속성으로 매핑되며, 값이 사용자 정의 객체인 경우 해당 객체의 필드들도 함께 직렬화됩니다. 만약 더 깊은 중첩 구조까지 완전하게 직렬화해야 한다면 deepSerialize() 메서드나 include() 메서드를 함께 활용하는 것이 좋습니다.