JSON Patch 생성기
두 JSON 문서를 비교해 앞의 것을 뒤의 것으로 바꾸는 RFC 6902 패치를 얻으세요. 모든 처리는 브라우저 안에서 이루어집니다.
이 도구가 하는 일
두 JSON 문서를 비교해, 앞의 것을 뒤의 것으로 바꾸는 작업 목록을 RFC 6902가 정한 형식으로 써 줍니다. 필드 하나가 바뀌었다고 알리려고 문서 전체를 보내는 대신, 변경 자체를 보내는 것입니다.
언제 쓰면 좋은가
PATCH 요청의 본문을 만들 때, 설정 파일의 두 버전 사이에서 무엇이 바뀌었는지 기록할 때, 또는 전체 사본을 모두 보관하는 것보다 훨씬 작은 감사 기록을 남길 때 쓰면 됩니다. 똑같아 보이는 두 문서가 실제로 어디가 다른지 빠르게 알아내는 방법이기도 합니다.
생성되는 작업
| 작업 | 의미 |
|---|---|
| add | 값이 없던 자리에 값을 넣거나 배열에 끼워 넣습니다. |
| remove | 그 자리의 값을 지웁니다. |
| replace | 이미 존재하는 자리의 값을 덮어씁니다. |
| move | 값을 한 자리에서 다른 자리로 옮깁니다. |
| copy | 값을 다른 자리로 복사합니다. |
| test | 값을 확인하고 맞지 않으면 패치 전체를 중단합니다. |
이 도구는 add, remove, replace만 씁니다. 이 셋이면 어떤 변경도 표현할 수 있고, 한 줄씩 읽어 낼 수 있는 패치가 짧지만 머리를 써야 하는 패치보다 값집니다. 나머지 셋도 RFC 6902의 일부이며 규격을 따르는 서버라면 모두 받아들입니다.
경로가 동작하는 방식
각 경로는 JSON Pointer(RFC 6901)입니다. 문서의 뿌리에서 시작해 슬래시로 구분한 길이며, “/address/zipCode”는 address 안의 zipCode 필드를 뜻합니다. 배열 위치는 숫자이므로 “/skills/0”은 첫 번째 항목이고, 하이픈은 배열의 끝을 뜻해 “/skills/-”는 뒤에 덧붙입니다. 슬래시가 구분자이므로 슬래시를 포함한 키는 ~1로 쓰고, 글자 그대로의 물결표는 ~0으로 씁니다.
출력에 대한 참고
비교는 글자 그대로 이루어집니다. 값을 자리마다 맞대어 보므로 배열 앞쪽에 항목을 끼워 넣으면 한 번의 삽입이 아니라 뒤따르는 모든 항목에 replace가 생깁니다. 안정된 식별자를 가진 객체 배열이라면 식별자로 만든 패치가 위치로 만든 것보다 언제나 작습니다.
JSON Patch를 만드는 방법
두 JSON 문서를 붙여 넣고 패치를 생성하세요.
- 왼쪽에 원본 JSON을 붙여 넣습니다.
- 오른쪽에 변경된 JSON을 붙여 넣습니다.
- 생성을 누르고 패치를 복사합니다.
자주 묻는 질문
이 도구가 제 데이터를 어딘가로 보내나요?
아닙니다. 두 문서 모두 브라우저 안에 머물고, 패치는 여러분의 기기에서 만들어집니다.
출력이 RFC 6902를 따르나요?
네. 모든 작업은 op와 path를 가진 객체이며 add와 replace에는 value가 붙고, 경로는 RFC 6901이 정의한 JSON Pointer입니다.
move와 copy 작업도 포함되나요?
아닙니다. add, remove, replace만 씁니다. 어떤 변경도 표현할 수 있고 읽기가 훨씬 쉽기 때문입니다. move는 remove 뒤에 add가 오는 것일 뿐입니다.
패치는 어떻게 적용하나요?
application/json-patch+json을 받는 API로 보내거나 라이브러리를 쓰세요. Python은 jsonpatch, 자바스크립트는 json-patch, .NET은 JsonPatchDocument, Java는 json-patch 같은 식입니다.
JSON Merge Patch와 무엇이 다른가요?
JSON Merge Patch(RFC 7386)는 문서 자체와 비슷한 모양이고 null이 “삭제”를 뜻합니다. 읽기는 쉽지만 진짜 null을 담을 수 없고 배열의 항목 하나만 바꿀 수도 없습니다. JSON Patch는 장황한 대신 무엇이든 표현할 수 있습니다.
Wikipedia — JSON Patch
Wikipedia — JSON
Wikipedia — Patch (computing)
Wikipedia — Diff
Wikipedia — REST