[1] [DFN[[[JSON Merge Patch]]]] は、 [[JSON]] の[[差分]]の表現方法の一つです。

* 仕様書

[REFS[
- [2] [CITE@en[RFC 7396 - JSON Merge Patch]] ([TIME[2014-11-01 10:02:11 +09:00]] 版) <https://tools.ietf.org/html/rfc7396>
]REFS]

* 構文

[10] [[JSON]] に対する変更の指示を [[JSON]] によって記述します。

[11] 操作を明示するのではなく、構造と新しい値によって間接的に操作を記述しています。

[12] [[オブジェクト]]の値の追加・変更や削除は記述できますが、[[配列]]の編集は記述できず、[[配列]]を含む[[オブジェクト]]の編集として記述する必要があります。

[13] 最上位の値は[[オブジェクト]]でなければならず、それ以外の値は扱うことができません。また新しい値が [CODE[[[null]]]] であるような追加・変更は記述できません。

* MIME 型

[14] [[MIME型]]は [CODE(MIME)@en[[[application/merge-patch+json]]]] とされています [SRC[>>2]]。

* 応用

[15] [[HTTP]] [CODE(HTTP)@en[[[PATCH]]]] [[メソッド]]で使うことが想定されています [SRC[>>2]]。

* 歴史

** RFC 7386

[REFS[
- [3] [CITE@en[RFC 7386 - JSON Merge Patch]] ([TIME[2014-11-01 09:19:50 +09:00]] 版) <https://tools.ietf.org/html/rfc7386>
- [4] [CITE[RFC Errata Report]] ([TIME[2014-12-12 19:14:31 +09:00]] 版) <http://www.rfc-editor.org/errata_search.php?rfc=7386>
- [5] [CITE[appsawg in ietf 91]] ([TIME[2014-11-24 01:11:25 +09:00]] 版) <http://www.ietf.org/proceedings/91/minutes/minutes-91-appsawg>
]REFS]

[6] [[JSON Merge Patch]] は2014年10月に [DFN[[[RFC 7386]]]] として出版されました [RSC[>>3]]
が、 [[RFC Editor]] の杜撰な[[空白]]の処理が原因で本文中の[[擬似コード]]の意味が不明瞭になっており
[SRC[>>4, >>5]]、同月中に改めて [DFN[[[RFC 7396]]]] [SRC[>>2]] として出版し直されています。

[7] [[JSON]] に関しては同年3月に [[RFC 7158]] が [[RFC 7159]] として再出版される珍事があったばかりでしたが
([[JSON]] の歴史の項を参照。)、1年も経たないうちにミスを繰り返す [[RFC Editor]]
の失態には呆れる以前に呪われている気さえしてきます。

;; [8] さすがに今回は再出版でまた間違えるようなことはなかったようです。

;; [9] 直前の [[Internet Draft]] まで正しかったものをわざわざ部外者である [[RFC Editor]]
が再編集して誤りを混入させたり、一度出版するとどんなに深刻な不具合があっても修正できない
[[RFC]] の歴史的な制約にいつまでもこだわり続けたりする [[IETF]]
の標準化手続きには果たしてどれだけの意味があるのでしょうね?

* 関連

[16] [[JSON Patch]] とは名前が似ていますが異なります。 [[JSON Patch]]
との互換性はありません。

;; [17] [[JSON Patch]] の方が [[JSON Merge Patch]] より記述できる変更の集合が大きいようです。


[18] [CITE[Re: ''''''[''''''Json'''''']'''''' RFC 7386: correct indentation of the MergePatch function...]]
( ([TIME[2014-10-31 01:51:52 +09:00]] 版))
<http://www.ietf.org/mail-archive/web/json/current/msg03402.html>

[FIG(quote)[
[FIGCAPTION[
[19] [CITE@en[Buckets — Kinto 8.1.5 documentation]]
([TIME[2018-02-21 01:03:17 +09:00]])
<https://kinto.readthedocs.io/en/latest/api/1.x/buckets.html>
]FIGCAPTION]

> JSON merge is currently supported using Content-Type: application/merge-patch+json. 

]FIG]
