1. 개요
주어진 JSON 문서를 순차적으로 수정하는 편집 데이터를 표현하는 형식이다.RFC 6902에 RFC 표준으로 등록되어 있다.[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 데이터로 대체한다. 같은 위치에remove와add를 한번에 수행한 것과 논리적으로 같다. - 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.