に最終更新
JSON_REPLACE
説明
JSON_REPLACE 関数は JSON 内の値を置き換え、変更後の JSON を返します。
構文
JSON_REPLACE (<json_object>, <path>, <value>[, <path>, <value>, ...])
パラメータ
<json_object>: 変更対象となる JSON 型の式です。<path>: 置き換える値のパスを指定する文字列型の式です。<value>: 置き換え後の値です。JSON 型、またはTO_JSONがサポートする型を指定します。
戻り値
- Nullable(JSON): 変更後の JSON オブジェクトを返します。
使用上の注意
- パスと値の組は左から右へ順に評価されます。
<path>が指す値が JSON オブジェクトに存在しない場合、その組は何も変更しません。<path>にワイルドカードは指定できません。指定するとエラーになります。<json_object>または<path>が NULL の場合は NULL を返します。<value>が NULL の場合は JSON の null 値を挿入します。
例
- パスと値の組を左から右へ順に評価する
select json_replace('{"k": {"k2": "v2"}}', '$.k', json_parse('{"k2": 321, "k3": 456}'), '$.k.k2', 123);+-------------------------------------------------------------------------------------------------+
| json_replace('{"k": {"k2": "v2"}}', '$.k', json_parse('{"k2": 321, "k3": 456}'), '$.k.k2', 123) |
+-------------------------------------------------------------------------------------------------+
| {"k":{"k2":123,"k3":456}} |
+-------------------------------------------------------------------------------------------------+ <path>が指す値が JSON オブジェクトに存在しない場合select json_replace('{"k": 1}', "$.k2", 2);+-------------------------------------+
| json_replace('{"k": 1}', "$.k2", 2) |
+-------------------------------------+
| {"k":1} |
+-------------------------------------+<path>にワイルドカードは指定できないselect json_replace('{"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- NULL パラメータ
select json_replace(NULL, '$[1]', 123);+---------------------------------+
| json_replace(NULL, '$[1]', 123) |
+---------------------------------+
| NULL |
+---------------------------------+select json_replace('{"k": "v"}', NULL, 123);+---------------------------------------+
| json_replace('{"k": "v"}', NULL, 123) |
+---------------------------------------+
| NULL |
+---------------------------------------+select json_replace('{"k": "v"}', '$.k', NULL);+-----------------------------------------+
| json_replace('{"k": "v"}', '$.k', NULL) |
+-----------------------------------------+
| {"k":null} |
+-----------------------------------------+