JsonBuilderFactory 인터페이스는 JsonObjectBuilder 인스턴스를 생성하는 팩토리이며, JsonObjectBuilder는 JsonObject 모델을 처음부터 생성하기 위한 빌더입니다. 이 인터페이스는 빈 JSON 객체 모델을 초기화하고, 객체 모델에 이름/값 쌍을 추가하는 메서드와 결과 객체를 반환하는 메서드를 제공합니다. createObjectBuilder() 메서드를 사용하여 JsonObject를 빌드하는 데 사용할 수 있는 JsonObjectBuilder 인스턴스를 생성할 수 있습니다.
구문
JsonObjectBuilder createObjectBuilder()
아래 예제에서는 새로 추가된 데이터로 기존 JSON 데이터를 업데이트하는 방법을 보여줍니다.
예제
import java.io.*;
import javax.json.*;
public class UpdateExistingJsonTest {
public static void main(String[] args) throws Exception {
String jsonString = "{\"id\":\"115\", \"name\":\"Raja\", \"address\":[{\"area\":\"Madhapur\", \"city\":\"Hyderabad\"}]}";
StringReader reader = new StringReader(jsonString);
JsonReader jsonReader = Json.createReader(reader);
System.out.println("기존 JSON: \n" + jsonString);
StringWriter writer = new StringWriter();
JsonWriter jsonWriter = Json.createWriter(writer);
JsonObject jsonObject = jsonReader.readObject();
JsonBuilderFactory jsonBuilderFactory = Json.createBuilderFactory(null);
JsonObjectBuilder jsonObjectBuilder = jsonBuilderFactory.createObjectBuilder();
// 기존 필드 복사
for (String key : jsonObject.keySet()) {
jsonObjectBuilder.add(key, jsonObject.get(key));
}
// 새 필드 추가
jsonObjectBuilder.add("Contact Number", "9959984000");
jsonObjectBuilder.add("Country", "India");
jsonObject = jsonObjectBuilder.build();
jsonWriter.writeObject(jsonObject);
System.out.println("새 JSON: \n" + jsonObject);
}
}
실행 결과
기존 JSON:
{"id":"115", "name":"Raja", "address":[{"area":"Madhapur", "city":"Hyderabad"}]}
새 JSON:
{"id":"115","name":"Raja","address":[{"area":"Madhapur","city":"Hyderabad"}],"Contact Number":"9959984000","Country":"India"}
핵심 포인트
- JsonReader를 사용하여 문자열에서 JSON 객체 읽기
- JsonBuilderFactory로 빌더 인스턴스 생성
- 기존 키-값 쌍을 새 빌더에 복사
- add() 메서드로 새로운 필드 추가
- build()로 최종 JsonObject 생성
- JsonWriter로 결과 출력
이 방식은 기존 JSON 구조를 유지하면서 새로운 필드를 추가하거나 기존 필드를 수정할 때 유용합니다. 중첩된 객체나 배열의 경우 해당 요소를 가져와 별도의 빌더로 수정한 후 다시 추가하는 방식으로 처리할 수 있습니다.