최근 수정 시각 : 2025-12-31 23:42:54

JSON Patch


1. 개요2. 구조
2.1. 연산별 상세
3. 관련 문서

1. 개요

주어진 JSON 문서를 순차적으로 수정하는 편집 데이터를 표현하는 형식이다.

RFC 6902RFC 표준으로 등록되어 있다.[1] JSON Pointer와 관련성이 깊은데, RFC 등록 번호가 바로 다음 순서이며 양쪽 스펙 모두 Paul Bryan과 Mark Nottingham이 참여했다.

JSON 데이터를 수정하는 다양한 환경에서 사용될 수 있다. 가령 JSON을 주고받는 HTTP API에서 PATCH 메서드 등을 통해 서버에 저장된 큰 값의 일부를 수정하는 등의 용도로 사용될 수 있다. 이런 경우 MIME 타입은 application/json-patch+json를 사용한다.

2. 구조

JSON Patch 형식 자체도 JSON 형식으로 되어 있으며, 기본적으로 각각의 수정 데이터를 담고 있는 하나의 큰 배열이다. 이 때 각각의 수정 데이터를 operation이라고 하며, 편의상 연산으로 번역한다. 각 연산은 JSON 객체 형식으로, "op" 값으로 종류를 구분한다. 가령 add 연산이면
{ "op": "add", "path": "/a/b/c", "value": "value" }
처럼 주어지는 식이다. 구체적으로, 각각의 연산은 다음 키를 가지는 JSON 객체이다.
의미
"op" 해당 연산의 종류
"path" 대상 JSON에서 해당 연산이 수행될 위치. JSON Pointer 형식으로 나타낸다.

2.1. 연산별 상세

  • add
    "value"에 주어진 JSON 데이터를 "path"가 가리키는 위치에 삽입한다. 만약 해당 위치가 배열 인덱스를 가리킨다면 그 위치에 새 값을 추가하고 나머지 원소를 뒤로 민다. 가리키는 위치가 객체라면 새 값을 추가하거나 기존 값을 대체한다.
  • remove
    "path"가 가리키는 값을 삭제한다. 배열 인덱스를 가리킨다면 해당 원소를 지우고 나머지 원소를 앞으로 민다.
  • replace
    "path"가 가리키는 값을 "value"로 주어진 JSON 데이터로 대체한다. 같은 위치에 removeadd를 한번에 수행한 것과 논리적으로 같다.
  • move
    "from"이 가리키는 값을 "path"로 옮긴다. 이 때 "from" 값도 JSON Pointer 형식이다. "from" 위치에서 remove를 하고 그 값을 "path" 위치에 add한 것과 논리적으로 같다.
  • copy
    "from"이 가리키는 값을 "path"로 복사한다. 값이 추가되는 동작은 add와 동일하다.
  • test
    "path"가 가리키는 값이 "value"로 주어진 JSON 데이터와 같은지 검사한다.

3. 관련 문서


[1] P. C. Bryan and M. Nottingham, “JavaScript Object Notation (JSON) Patch.” RFC Editor, Apr. 2013. doi: 10.17487/RFC6902.