<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="1" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[1]</anchor-end> <dfn><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">JSON Merge Patch</anchor></dfn> は、 <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">JSON</anchor> の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">差分</anchor>の表現方法の一つです。</p><section><h1>仕様書</h1><refs xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><ul xmlns="http://www.w3.org/1999/xhtml"><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="2" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[2]</anchor-end> <cite xml:lang="en">RFC 7396 - JSON Merge Patch</cite> (<time>2014-11-01 10:02:11 +09:00</time> 版) <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://tools.ietf.org/html/rfc7396">https://tools.ietf.org/html/rfc7396</anchor-external></li></ul></refs></section><section><h1>構文</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="10" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[10]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">JSON</anchor> に対する変更の指示を <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">JSON</anchor> によって記述します。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="11" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[11]</anchor-end> 操作を明示するのではなく、構造と新しい値によって間接的に操作を記述しています。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="12" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[12]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">オブジェクト</anchor>の値の追加・変更や削除は記述できますが、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">配列</anchor>の編集は記述できず、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">配列</anchor>を含む<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">オブジェクト</anchor>の編集として記述する必要があります。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="13" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[13]</anchor-end> 最上位の値は<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">オブジェクト</anchor>でなければならず、それ以外の値は扱うことができません。また新しい値が <code><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">null</anchor></code> であるような追加・変更は記述できません。</p></section><section><h1>MIME 型</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="14" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[14]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">MIME型</anchor>は <code class="MIME" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">application/merge-patch+json</anchor></code> とされています <src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="2" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;2</anchor-internal></src>。</p></section><section><h1>応用</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="15" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[15]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTTP</anchor> <code class="HTTP" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">PATCH</anchor></code> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">メソッド</anchor>で使うことが想定されています <src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="2" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;2</anchor-internal></src>。</p></section><section><h1>歴史</h1><section><h1>RFC 7386</h1><refs xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><ul xmlns="http://www.w3.org/1999/xhtml"><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="3" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[3]</anchor-end> <cite xml:lang="en">RFC 7386 - JSON Merge Patch</cite> (<time>2014-11-01 09:19:50 +09:00</time> 版) <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://tools.ietf.org/html/rfc7386">https://tools.ietf.org/html/rfc7386</anchor-external></li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="4" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[4]</anchor-end> <cite>RFC Errata Report</cite> (<time>2014-12-12 19:14:31 +09:00</time> 版) <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://www.rfc-editor.org/errata_search.php?rfc=7386">http://www.rfc-editor.org/errata_search.php?rfc=7386</anchor-external></li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="5" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[5]</anchor-end> <cite>appsawg in ietf 91</cite> (<time>2014-11-24 01:11:25 +09:00</time> 版) <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://www.ietf.org/proceedings/91/minutes/minutes-91-appsawg">http://www.ietf.org/proceedings/91/minutes/minutes-91-appsawg</anchor-external></li></ul></refs><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="6" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[6]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">JSON Merge Patch</anchor> は2014年10月に <dfn><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">RFC 7386</anchor></dfn> として出版されました <RSC xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="3" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;3</anchor-internal></RSC>
が、 <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">RFC Editor</anchor> の杜撰な<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">空白</anchor>の処理が原因で本文中の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">擬似コード</anchor>の意味が不明瞭になっており
<src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="4" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;4</anchor-internal>, <anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="5" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;5</anchor-internal></src>、同月中に改めて <dfn><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">RFC 7396</anchor></dfn> <src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="2" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;2</anchor-internal></src> として出版し直されています。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="7" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[7]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">JSON</anchor> に関しては同年3月に <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">RFC 7158</anchor> が <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">RFC 7159</anchor> として再出版される珍事があったばかりでしたが
(<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">JSON</anchor> の歴史の項を参照。)、1年も経たないうちにミスを繰り返す <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">RFC Editor</anchor>
の失態には呆れる以前に呪われている気さえしてきます。</p><comment-p xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="8" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[8]</anchor-end> さすがに今回は再出版でまた間違えるようなことはなかったようです。</comment-p><comment-p xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="9" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[9]</anchor-end> 直前の <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Internet Draft</anchor> まで正しかったものをわざわざ部外者である <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">RFC Editor</anchor>
が再編集して誤りを混入させたり、一度出版するとどんなに深刻な不具合があっても修正できない
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">RFC</anchor> の歴史的な制約にいつまでもこだわり続けたりする <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">IETF</anchor>
の標準化手続きには果たしてどれだけの意味があるのでしょうね?</comment-p></section></section><section><h1>関連</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="16" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[16]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">JSON Patch</anchor> とは名前が似ていますが異なります。 <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">JSON Patch</anchor>
との互換性はありません。</p><comment-p xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="17" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[17]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">JSON Patch</anchor> の方が <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">JSON Merge Patch</anchor> より記述できる変更の集合が大きいようです。</comment-p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="18" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[18]</anchor-end> <cite>Re: <strong></strong>[<strong></strong>Json<strong></strong>]<strong></strong> RFC 7386: correct indentation of the MergePatch function...</cite>
( (<time>2014-10-31 01:51:52 +09:00</time> 版))
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://www.ietf.org/mail-archive/web/json/current/msg03402.html">http://www.ietf.org/mail-archive/web/json/current/msg03402.html</anchor-external></p><figure class="quote"><figcaption><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="19" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[19]</anchor-end> <cite xml:lang="en">Buckets — Kinto 8.1.5 documentation</cite>
(<time>2018-02-21 01:03:17 +09:00</time>)
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://kinto.readthedocs.io/en/latest/api/1.x/buckets.html">https://kinto.readthedocs.io/en/latest/api/1.x/buckets.html</anchor-external></figcaption><blockquote><p>JSON merge is currently supported using Content-Type: application/merge-patch+json. </p></blockquote></figure></section></body></html>