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

Java에서 Flexjson 라이브러리로 Map 객체를 JSON으로 직렬화하는 방법

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() 메서드를 함께 활용하는 것이 좋습니다.