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

Java에서 Flexjson 라이브러리로 JSON을 역직렬화하는 방법

Flexjson은 Java 객체를 JSON 형식으로 직렬화하고 역직렬화할 수 있는 경량화된 라이브러리입니다. 이 라이브러리는 객체의 깊은 복사(deep copy)와 얕은 복사(shallow copy)를 모두 지원한다는 특징이 있습니다.

Java 프로그램에서 Flexjson을 사용하려면 먼저 flexjson 패키지를 임포트해야 합니다. JSON 문자열을 Java 객체로 역직렬화할 때는 JSONDeserializer 클래스의 deserialize() 메서드를 사용합니다. 이 메서드는 JSON 문자열을 입력으로 받아 해당 표현을 기반으로 정적 타입(static typed)의 객체 그래프를 생성합니다.

기본적으로 JSONDeserializer는 JSON 데이터에 포함된 class 속성을 활용하여 타입이 지정되지 않은 일반적인 JSON 데이터를 특정 Java 타입에 매핑합니다.

문법

public T deserialize(String input)

아래 예제 프로그램에서는 JSON 문자열을 Java 객체로 역직렬화하는 과정을 보여줍니다.

예제

import flexjson.*;

public class DeserializeJSONTest {
    public static void main(String[] args) {
        JSONDeserializer<Student> deserializer = new JSONDeserializer<Student>();
        String jsonStr =
                "{" +
                "\"firstName\": \"Ravi\"," +
                "\"lastName\": \"Chandra\"," +
                "\"age\": 35," +
                "\"class\": \"Student\"," +
                "\"salary\": 50000.00," +
                "}";
        Student student = deserializer.deserialize(jsonStr);
        System.out.println(student);
    }
}

// Student 클래스
class Student {
    private String firstName;
    private String lastName;
    private int age;
    private double salary;

    public Student() {}

    public Student(String firstName, String lastName, int age, double salary) {
        super();
        this.firstName = firstName;
        this.lastName = lastName;
        this.age = age;
        this.salary = salary;
    }

    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 double getSalary() {
        return salary;
    }

    public void setSalary(double salary) {
        this.salary = salary;
    }

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

실행 결과

Student[ firstName = Ravi, lastName = Chandra, age = 35, salary = 50000.0 ]

위 예제에서 볼 수 있듯이, JSON 문자열에 포함된 "class": "Student" 속성 덕분에 JSONDeserializer가 별도의 타입 지정 없이도 해당 데이터를 Student 객체로 자동 매핑할 수 있습니다. 만약 JSON에 class 속성이 없다면 deserialize(String input, Class<T> clazz) 형태로 대상 클래스를 직접 지정하는 방법도 사용할 수 있습니다.