JSON_INSERT
説明
JSON_INSERT関数は、JSONにデータを挿入し、結果を返すために使用されます。
構文
JSON_INSERT (<json_object>, <path>, <value>[, <path>, <value>, ...])
パラメータ
<json_object>: JSON型の式、変更対象となるオブジェクト<path>: String型の式、値を挿入するパスを指定<value>: JSON型またはTO_JSONでサポートされるその他の型、挿入する値
戻り値
Nullable(JSON)変更されたJSONオブジェクトを返す
使用上の注意
- パスと値のペアは左から右に評価されることに注意してください。
<path>が指すJSONオブジェクト内の値が既に存在する場合、効果がありません。<path>にはワイルドカードを含めることはできません。ワイルドカードが含まれている場合はエラーが報告されます。<path>が複数レベルのパスを含む場合、最後のレベル以外のすべてのパスがJSONオブジェクト内に存在している必要があります。<path>が配列のメンバー要素を指しているが、オブジェクトが実際には配列でない場合、そのオブジェクトは配列の最初のメンバーに変換され、その後通常の配列として処理されます。<json_object>または<path>がNULLの場合、NULLが返されます。<value>がNULLの場合、JSON null値が挿入されます。
例
-
パスと値のペアは左から右に評価されます
select json_insert('{}', '$.k', json_parse('{}'), '$.k.k2', 123);+-----------------------------------------------------------+
| json_insert('{}', '$.k', json_parse('{}'), '$.k.k2', 123) |
+-----------------------------------------------------------+
| {"k":{"k2":123}} |
+-----------------------------------------------------------+ -
<path>で指定された値がJSONオブジェクト内に既に存在しますselect json_insert('{"k": 1}', "$.k", 2);+-----------------------------------+
| json_insert('{"k": 1}', "$.k", 2) |
+-----------------------------------+
| {"k":1} |
+-----------------------------------+ -
<path>にはワイルドカードを含めることはできませんselect json_insert('{"k": 1}', "$.*", 2);ERROR 1105 (HY000): errCode = 2, detailMessage = [INVALID_ARGUMENT] In this situation, path expressions may not contain the * and ** tokens or an array range, argument index: 1, row index: 0 -
マルチレベルパスを作成できません
select json_insert('{}', '$.k1.k2.k3', 123);+--------------------------------------+
| json_insert('{}', '$.k1.k2.k3', 123) |
+--------------------------------------+
| {} |
+--------------------------------------+ -
配列への自動変換
select json_insert('{"k": "v"}', '$[1]', 123);+----------------------------------------+
| json_insert('{"k": "v"}', '$[1]', 123) |
+----------------------------------------+
| [{"k": "v"}, 123] |
+----------------------------------------+select json_insert('{"k": "v"}', '$.k[1]', 123);+------------------------------------------+
| json_insert('{"k": "v"}', '$.k[1]', 123) |
+------------------------------------------+
| {"k": ["v", 123]} |
+------------------------------------------+ -
NULLパラメータ
select json_insert(NULL, '$[1]', 123);+--------------------------------+
| json_insert(NULL, '$[1]', 123) |
+--------------------------------+
| NULL |
+--------------------------------+select json_insert('{"k": "v"}', NULL, 123);+--------------------------------------+
| json_insert('{"k": "v"}', NULL, 123) |
+--------------------------------------+
| NULL |
+--------------------------------------+select json_insert('{"k": "v"}', '$.k[1]', NULL);+-------------------------------------------+
| json_insert('{"k": "v"}', '$.k[1]', NULL) |
+-------------------------------------------+
| {"k": ["v", null]} |
+-------------------------------------------+