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

Java에서 Flexjson을 활용해 객체 배열을 JSON으로 직렬화하는 방법

Flexjson은 Java 객체를 JSON 형식으로 직렬화(serialize)하고 역직렬화(deserialize)할 수 있도록 지원하는 경량 라이브러리입니다. 이 라이브러리를 사용하면 객체 배열 역시 손쉽게 JSON 문자열로 변환할 수 있습니다.

JSONSerializer의 serialize() 메서드

객체 배열을 직렬화하려면 JSONSerializer 클래스의 serialize() 메서드를 사용하면 됩니다. 이 메서드는 대상 인스턴스에 대해 얕은 직렬화(shallow serialization)를 수행하며, 기본적으로 객체의 모든 public 필드와 getter 메서드가 반환하는 값을 JSON 속성으로 변환합니다.

메서드 시그니처

public String serialize(Object target)

아래 예제 프로그램에서는 Student 객체 배열을 JSON 문자열로 직렬화하는 과정을 보여줍니다. prettyPrint(true) 옵션을 설정하면 들여쓰기가 적용된 보기 좋은 형태로 출력됩니다.

예제 코드

import flexjson.JSONSerializer;

public class JsonSerializeArrayTest {
    public static void main(String[] args) {
        JSONSerializer serializer = new JSONSerializer().prettyPrint(true);
        Student stud1 = new Student("Adithya", "Sai", 28, "Hyderabad");
        Student stud2 = new Student("Jai", "Dev", 30, "Chennai");
        Student stud3 = new Student("Ravi", "Chandra", 35, "Pune");

        Student[] students = {stud1, stud2, stud3};
        String jsonStr = serializer.serialize(students);
        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 +
               " ]";
    }
}

실행 결과

위 코드를 실행하면 세 개의 Student 객체가 담긴 배열이 다음과 같은 JSON 배열 형태로 변환됩니다. 각 객체에는 클래스 이름을 나타내는 class 속성이 자동으로 포함되는 점에 유의하세요.

[
  {
    "address": "Hyderabad",
    "age": 28,
    "class": "Student",
    "firstName": "Adithya",
    "lastName": "Sai"
  },
  {
    "address": "Chennai",
    "age": 30,
    "class": "Student",
    "firstName": "Jai",
    "lastName": "Dev"
  },
  {
    "address": "Pune",
    "age": 35,
    "class": "Student",
    "firstName": "Ravi",
    "lastName": "Chandra"
  }
]

정리하면, Flexjson의 JSONSerializer.serialize() 메서드에 배열을 그대로 전달하기만 하면 별도의 추가 설정 없이도 객체 배열 전체를 JSON으로 변환할 수 있습니다. 필요에 따라 exclude()include() 메서드를 활용해 특정 필드를 제외하거나 중첩 객체까지 깊게 직렬화하는 것도 가능합니다.