JsonPatch 인터페이스는 대상 JSON 구조에 적용할 수 있는 일련의 연산(sequence of operations)을 저장하기 위한 형식입니다. add(추가), remove(삭제), replace(교체), copy(복사), move(이동), test(검증)와 같은 다양한 연산을 JsonPatch에 저장해 두었다가, JSON 구조에 한 번에 적용할 수 있습니다.
JsonPatchBuilder 인터페이스는 Json.createPatchBuilder() 메서드를 호출하여 JSON 패치를 단계적으로 구성할 때 사용됩니다. 이러한 패치 방식은 전체 JSON 문서를 교체하는 대신 변경된 부분만 전송할 수 있기 때문에, REST API 설계 시 데이터 전송량을 줄이고 네트워크 효율성을 높이는 데 매우 유용합니다.
대상 JSON 파일

예제 코드
import java.io.*;
import javax.json.Json;
import javax.json.JsonPatch;
import javax.json.JsonPatchBuilder;
import javax.json.JsonReader;
import javax.json.JsonStructure;
public class JsonPatchTest {
public static void main(String[] args) throws Exception {
JsonPatchBuilder jsonPatchBuilder = Json.createPatchBuilder();
JsonPatch jsonPatch = jsonPatchBuilder.add("/postalCode", "500072").remove("/age").build();
JsonReader reader = Json.createReader(new FileReader("simple.json"));
JsonStructure jsonStructure1 = reader.read();
JsonStructure jsonStructure2 = jsonPatch.apply(jsonStructure1);
System.out.println(jsonStructure2);
reader.close();
}
}위 예제 코드의 동작 흐름은 다음과 같습니다.
Json.createPatchBuilder()를 호출하여 패치 빌더 객체를 생성합니다.add("/postalCode", "500072")로 postalCode 필드를 새로 추가하는 연산을 정의합니다.remove("/age")로 기존의 age 필드를 삭제하는 연산을 추가합니다.build()메서드로 위 연산들이 담긴 최종JsonPatch객체를 완성합니다.simple.json파일을 읽어 원본 JSON 구조를 얻은 뒤,apply()메서드로 패치를 적용합니다.
실행 결과
{"firstName":"Raja","lastName":"Ramesh","streetAddress":"Madhapur","city":"Hyderabad","state":"Telangana","phoneNumbers":[{"Mobile":"9959984000"},{"Home":"7702144400"}],"postalCode":"500072"}실행 결과를 살펴보면, 원본 JSON에서 age 필드는 성공적으로 삭제되었고, 값이 "500072"인 postalCode 필드가 새롭게 추가된 것을 확인할 수 있습니다. 나머지 필드들은 그대로 유지되며, 이처럼 JsonPatch를 활용하면 JSON 문서의 특정 부분만 선택적으로 수정할 수 있습니다.