JSON_SET
説明
JSON_SET関数は、JSONにデータを挿入または置換し、結果を返すために使用されます。
構文
JSON_SET (<json_object>, <path>, <value>[, <path>, <value>, ...])
パラメータ
<json_object>: JSON型の式、変更対象となるオブジェクト<path>: 文字列型の式、値を挿入するパスを指定<value>: JSON型またはTO_JSONでサポートされるその他の型、挿入する値
戻り値
- Nullable(JSON) 変更されたJSONオブジェクトを返す
使用上の注意
<path>で指定されたオブジェクトが存在する場合、その動作はJSON_REPLACEと一致し、そうでなければその動作はJSON_INSERTと一致する
例
-
パスが存在しない場合
select json_set('{}', '$.k', json_parse('{}'), '$.k.k2', 123);+--------------------------------------------------------+
| json_set('{}', '$.k', json_parse('{}'), '$.k.k2', 123) |
+--------------------------------------------------------+
| {"k":{"k2":123}} |
+--------------------------------------------------------+ -
<path>が指す値がJSONオブジェクト内に既に存在しますselect json_set('{"k": 1}', "$.k", 2);+--------------------------------+
| json_set('{"k": 1}', "$.k", 2) |
+--------------------------------+
| {"k":2} |
+--------------------------------+ -
NULLパラメータ
select json_set(NULL, '$[1]', 123);+-----------------------------+
| json_set(NULL, '$[1]', 123) |
+-----------------------------+
| NULL |
+-----------------------------+select json_set('{"k": "v"}', NULL, 123);+-----------------------------------+
| json_set('{"k": "v"}', NULL, 123) |
+-----------------------------------+
| NULL |
+-----------------------------------+select json_set('{"k": "v"}', '$.k[1]', NULL);+----------------------------------------+
| json_set('{"k": "v"}', '$.k[1]', NULL) |
+----------------------------------------+
| {"k":["v",null]} |
+----------------------------------------+