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]} |
+-------------------------------------------+