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

Java에서 JsonWriter를 사용해 JSON 객체를 직렬화하는 방법

개요

javax.json.JsonWriter 인터페이스는 JSON 객체나 배열 구조를 출력 소스(output source)에 기록하는 역할을 담당합니다. javax.json.JsonWriterFactory 클래스에는 JsonWriter 인스턴스를 생성하는 메서드들이 포함되어 있으며, 하나의 팩토리 인스턴스를 재사용하면 동일한 설정을 공유하는 여러 writer 인스턴스를 효율적으로 만들 수 있습니다.

또한 javax.json.Json 클래스가 제공하는 정적(static) 메서드 createWriter()를 사용하면 별도의 팩토리 생성 없이도 출력 소스로부터 바로 writer를 얻을 수 있어 코드가 더욱 간결해집니다.

문법(Syntex)

public static JsonWriter createWriter(Writer writer)

아래 예제에서는 JsonObjectBuilder로 JSON 객체 모델을 구성한 뒤, JsonWriter 인터페이스를 통해 이를 문자열 형태로 직렬화하는 전체 과정을 확인할 수 있습니다.

예제(Example)

import java.io.StringWriter;
import javax.json.Json;
import javax.json.JsonObject;
import javax.json.JsonObjectBuilder;
import javax.json.JsonWriter;
public class JsonWriterTest {
    public static void main(String[] args) {
        JsonObject jsonObj = Json.createObjectBuilder()
                .add("name", "Adithya")
                .add("age", 25)
                .add("salary", 40000)
                .add("address",
                        Json.createObjectBuilder().add("street", "Madhapur")
                                .add("city", "Hyderabad")
                                .add("zipCode", "500084")
                                .build()
                )
                .add("phoneNumber",
                        Json.createArrayBuilder().add("9959984000")
                                .add("7702144400")
                                .build()
                )
                .build();

        StringWriter stringWriter = new StringWriter();
        JsonWriter writer = Json.createWriter(stringWriter);
        writer.writeObject(jsonObj);
        writer.close();
        System.out.println(stringWriter.getBuffer().toString());
    }
}

코드 설명

createObjectBuilder()를 호출해 이름, 나이, 급여 같은 기본 필드를 추가하고, 내부 객체(address)는 다시 createObjectBuilder()로, 전화번호 목록(phoneNumber)은 createArrayBuilder()로 구성합니다. 이렇게 완성된 JsonObjectStringWriter에 연결된 JsonWriterwriteObject() 메서드에 전달하면 JSON 문자열로 직렬화됩니다.

작업이 끝난 후에는 반드시 close()를 호출해야 버퍼에 남은 데이터가 모두 출력 소스에 반영됩니다. 마지막으로 getBuffer().toString()으로 결과 문자열을 확인할 수 있습니다.

실행 결과(Output)

{"name":"Adithya","age":25,"salary":40000,"address":{"street":"Madhapur","city":
"Hyderabad","zipCode":"500084"},"phoneNumber":["9959984000","7702144400"]}