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

Java에서 Flexjson을 사용해 Reader 스트림으로부터 Java 객체를 역직렬화하는 방법

Flexjson이란?

Flexjson은 Java 객체를 JSON 형식으로 직렬화하고, JSON 데이터를 다시 Java 객체로 역직렬화할 수 있게 해주는 경량 라이브러리입니다. 별도의 복잡한 설정 없이 간단한 API만으로 객체와 JSON 간의 변환을 처리할 수 있어 많은 개발자에게 사랑받고 있습니다.

특히 Reader 스트림으로부터 Java 객체를 역직렬화해야 하는 경우에는 JSONDeserializer 클래스가 제공하는 deserialize() 메서드를 사용하면 됩니다. 이 메서드는 JSON 입력값으로 Reader 클래스의 인스턴스를 받아들이며, 파일, 네트워크 스트림 등 다양한 입력 소스에 유연하게 대응할 수 있습니다.

문법(Syntax)

public T deserialize(Reader input)
  • 매개변수: JSON 데이터를 담고 있는 Reader 객체
  • 반환값: 역직렬화된 제네릭 타입(T)의 Java 객체

예제(Example)

다음 예제에서는 JSON 문자열을 StringReader로 감싸 Reader 스트림 형태로 만든 뒤, 이를 deserialize() 메서드에 전달하여 Student 객체로 변환하는 과정을 보여줍니다.

import java.io.*;
import flexjson.JSONDeserializer;

public class JSONDeserializeReaderTest {
   public static void main(String[] args) {
      JSONDeserializer<Student> deserializer = new JSONDeserializer<Student>();
      String jsonStr =
            "{" +
            "\"firstName\": \"Adithya\"," +
            "\"lastName\": \"Sai\"," +
            "\"age\": 25," +
            "\"address\": \"Hyderabad\"," +
            "\"class\": \"Student\"" +
            "}";
      Student student = deserializer.deserialize(new StringReader(jsonStr));
      System.out.println(student);
   }
}

// 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 void setFirstName(String firstName) {
      this.firstName = firstName;
   }

   public String getLastName() {
      return lastName;
   }

   public void setLastName(String lastName) {
      this.lastName = lastName;
   }

   public int getAge() {
      return age;
   }

   public void setAge(int age) {
      this.age = age;
   }

   public String getAddress() {
      return address;
   }

   public void setAddress(String address) {
      this.address = address;
   }

   public String toString() {
      return "Student[ " +
         "firstName = " + firstName +
         ", lastName = " + lastName +
         ", age = " + age +
         ", address = " + address +
         " ]";
   }
}

코드 설명

  1. JSONDeserializer<Student> 객체를 생성하여 역직렬화 대상 타입을 지정합니다.
  2. JSON 문자열을 StringReader로 래핑하여 Reader 스트림으로 변환합니다.
  3. deserialize() 메서드에 Reader를 전달하면 JSON 키와 일치하는 필드에 값이 자동으로 매핑됩니다.

참고: 실제 파일에서 JSON을 읽어야 하는 경우 new FileReader("data.json")처럼 FileReader를 전달하면 동일한 방식으로 역직렬화할 수 있습니다.

출력 결과(Output)

Student[ firstName = Adithya, lastName = Sai, age = 25, address = Hyderabad ]

정리

Flexjson의 JSONDeserializer.deserialize(Reader input) 메서드를 활용하면 문자열뿐만 아니라 파일, 네트워크 등 다양한 Reader 기반 입력 스트림에서 손쉽게 Java 객체를 역직렬화할 수 있습니다. JSON의 키 이름과 대상 클래스의 필드 이름만 일치한다면 별도의 매핑 설정 없이 자동으로 변환이 이루어진다는 점이 큰 장점입니다.