説明
この関数は、RFC 7396規格に基づいて2つ以上のJSONドキュメントをマージし、マージ結果を返します。結果では重複するキーを持つメンバーは保持されません。パラメータのいずれかに渡されたドキュメントが無効な場合、エラーが発生します。
構文
JSON_MERGE_PATCH(json_doc, json_doc[, json_doc] ...)
説明
パラメータ json_doc は、マージ対象のJSONドキュメントを指定します。
JSON_MERGEPatch() のマージルールは次のとおりです:
最初のパラメータがオブジェクトでない場合、空のオブジェクトとして扱い、2番目のパラメータとマージしてマージ結果とします。
2番目のパラメータがオブジェクトでない場合、マージ結果は2番目のパラメータとなります。
2つのパラメータがどちらもオブジェクトの場合、マージ結果は以下のメンバーを持つオブジェクトとなります:
最初のオブジェクトのすべてのメンバーが、2番目のオブジェクトに同じキーを持つ対応するメンバーがない場合。
2番目のオブジェクトのすべてのメンバーが、最初のオブジェクトに対応するキーがなく、その値がJSONのnullリテラルでない場合。
すべてのメンバーのキーが最初と2番目のオブジェクトの両方に存在し、2番目のオブジェクトの値がJSONのnullリテラルでない場合。これらのメンバーの値は、最初のオブジェクトの値と2番目のオブジェクトの値を再帰的にマージした結果となります。
例
obclient> SELECT JSON_MERGE_PATCH('[1, 2, 3]', '[true, false]');
+------------------------------------------------+
| JSON_MERGE_PATCH('[1, 2, 3]', '[true, false]') |
+------------------------------------------------+
| [true, false] |
+------------------------------------------------+
1 row in set
obclient> SELECT JSON_MERGE_PATCH('{"name": "x"}', '{"id": 23}');
+-------------------------------------------------+
| JSON_MERGE_PATCH('{"name": "x"}', '{"id": 23}') |
+-------------------------------------------------+
| {"id": 23, "name": "x"} |
+-------------------------------------------------+
1 row in set
obclient> SELECT JSON_MERGE_PATCH('1', 'true');
+-------------------------------+
| JSON_MERGE_PATCH('1', 'true') |
+-------------------------------+
| true |
+-------------------------------+
1 row in set
obclient> SELECT JSON_MERGE_PATCH('[1, 2, 3]', '{"id": 45}');
+---------------------------------------------+
| JSON_MERGE_PATCH('[1, 2, 3]', '{"id": 45}') |
+---------------------------------------------+
| {"id": 45} |
+---------------------------------------------+
1 row in set
obclient> SELECT JSON_MERGE_PATCH('{ "a": 1, "b":2 }','{ "a": 3, "c":4 }');
+-----------------------------------------------------------+
| JSON_MERGE_PATCH('{ "a": 1, "b":2 }','{ "a": 3, "c":4 }') |
+-----------------------------------------------------------+
| {"a": 3, "b": 2, "c": 4} |
+-----------------------------------------------------------+
1 row in set
obclient> SELECT JSON_MERGE_PATCH('{ "a": 1, "b":2 }',NULL);
+--------------------------------------------+
| JSON_MERGE_PATCH('{ "a": 1, "b":2 }',NULL) |
+--------------------------------------------+
| NULL |
+--------------------------------------------+
1 row in set
obclient> SELECT JSON_MERGE_PATCH('{ "a": 1, "b":2 }','{ "a": 3, "c":4 }', '{ "a": 5, "d":6 }');
+--------------------------------------------------------------------------------+
| JSON_MERGE_PATCH('{ "a": 1, "b":2 }','{ "a": 3, "c":4 }', '{ "a": 5, "d":6 }') |
+--------------------------------------------------------------------------------+
| {"a": 5, "b": 2, "c": 4, "d": 6} |
+--------------------------------------------------------------------------------+
1 row in set