AZ Tools

JSON Patch 빌더 (RFC 6902)

개발

RFC 6902 JSON Patch는 JSON 문서 변경 사항 기술하는 와이어 포맷 — PATCH 요청·낙관적 업데이트·되돌리기 히스토리·운영 변환에 유용. 이 툴은 양방향 처리: source와 target JSON 붙여넣기 → 하나를 다른 하나로 변환하는 최소 patch 획득, 또는 source와 patch 붙여넣기 → 적용 후 결과 확인. diff는 슬래시·틸드 포함 키에 `~0`/`~1` JSON Pointer 이스케이프 사용한 재귀 구조 비교. apply 쪽은 6개 작업 모두 존중 — `test`(어설션 실패 시 에러)·`copy`·`move` 포함. 서버 호출 전 patch 테스트, 예시로 올바른 작업 찾을 때 유용.

Patch (RFC 6902)
[
  {
    "op": "replace",
    "path": "/age",
    "value": 31
  },
  {
    "op": "replace",
    "path": "/address/city",
    "value": "Busan"
  },
  {
    "op": "remove",
    "path": "/address/zip"
  },
  {
    "op": "add",
    "path": "/address/country",
    "value": "KR"
  },
  {
    "op": "replace",
    "path": "/tags/1",
    "value": "owner"
  },
  {
    "op": "add",
    "path": "/tags/2",
    "value": "user"
  }
]

순수 RFC 6902 — add·remove·replace·move·copy·test 작업과 `~0`/`~1` 포인터 이스케이프 지원.

사용법

  1. Diff 모드: source와 target 붙여넣기 → patch JSON 확인. 한쪽 편집 → patch 변화 확인.
  2. Apply 모드: source와 patch 배열 붙여넣기 → 결과 문서 확인. 에러(잘못된 포인터·실패한 `test`) 인라인 표시.
  3. JSON Pointer 구문: `/foo/0/bar`는 `foo.0.bar` 탐색. `/`는 `~1`로, `~`는 `~0`으로 이스케이프. 배열 경로의 후행 `-`는 '추가' 의미.

자주 묻는 질문

왜 새 문서 그냥 안 보내?
첫째 대역폭. 둘째 동시성: Alice와 Bob 둘 다 문서 편집 시 patch는 의미적으로 병합 가능(`replace /name`은 `add /tags/-`과 호환), 두 전체 문서는 승자 선택해야 함. 게다가 patch는 무엇이·언제 변경됐는지 정확한 감사 기록.
JSON Merge Patch (RFC 7396)와 같나?
아니. Merge Patch는 더 단순 — 존재하는 키가 덮어쓰고 `null`이 삭제하는 부분 문서 전송. 사람엔 쉽지만 정밀도 손실(배열 추가 불가·리터럴 `null` 값 표현 불가·원자적 test 없음). RFC 6902(이 툴)은 정밀 와이어 포맷. RFC 7396은 편의 포맷.

관련 도구