Java에서 JSON 데이터를 프로그래밍 방식으로 생성할 때 JsonObjectBuilder와 JsonArrayBuilder를 활용하면 매우 편리합니다. JsonObjectBuilder는 JsonObject 모델을 만드는 데 사용되고, JsonArrayBuilder는 JsonArray 모델을 생성하는 데 사용됩니다.
두 빌더 모두 Json 클래스를 통해 생성할 수 있습니다. Json.createObjectBuilder().build()를 호출하면 비어 있는 JsonObject 인스턴스를 만들 수 있으며, 마찬가지로 Json.createArrayBuilder().build()를 사용하면 비어 있는 JsonArray 인스턴스를 생성할 수 있습니다.
주요 특징
- JsonObjectBuilder: 키-값 쌍으로 구성된 JSON 객체를 체이닝 방식으로 순차적으로 추가하며 생성합니다.
- JsonArrayBuilder: 배열 형태의 JSON 데이터를 요소 단위로 추가하여 생성합니다.
- 빌더 안에 다른 빌더를 중첩하여 중첩된 객체나 배열도 손쉽게 표현할 수 있습니다.
예제 코드
아래 예제는 직원 정보를 담는 JSON 객체를 생성하는 코드입니다. 이름, 나이, 급여와 같은 기본 필드에 더해, 주소 정보는 중첩된 JsonObject로, 전화번호는 JsonArray로 구성했습니다.
import java.io.*;
import javax.json.*;
public class JsonObjectTest {
public static void main(String[] args) {
JsonObject empObject = Json.createObjectBuilder().add("empName", "Jai")
.add("empAge", "25")
.add("empSalary", "40000")
.add("empAddress",
Json.createObjectBuilder().add("street", "IDPL Colony")
.add("city", "Hyderabad")
.add("pinCode", "500072")
.build()
)
.add("phoneNumber",
Json.createArrayBuilder().add("9959984000")
.add("7702144400")
.build()
)
.build();
System.out.println(empObject);
}
}실행 결과
{"empName":"Jai","empAge":"25","empSalary":"40000","empAddress":{"street":"IDPL Colony","city":"Hyderabad","pinCode":"500072"},"phoneNumber":["9959984000","7702144400"]}정리
이처럼 JsonObjectBuilder의 add() 메서드는 빌더 자신을 반환하기 때문에 메서드 체이닝을 통해 가독성 높은 코드를 작성할 수 있습니다. 또한 add() 메서드 내부에서 Json.createObjectBuilder()나 Json.createArrayBuilder()를 호출하고 build()로 완성된 객체를 전달하면, 위 예제의 주소 객체나 전화번호 배열처럼 복잡한 계층 구조의 JSON도 간결하게 표현할 수 있습니다.