JSON_SET
説明
json_set関数はJSONにデータを挿入または更新し、結果を返します。
構文
JSON_SET (<json_str>, <path>, <val> [, <path>, <val>, ...])
パラメータ
| パラメータ | 説明 |
|---|---|
<jsonStr> | 挿入対象のJSONオブジェクト。NULLを含む任意の型の要素を持つJSONオブジェクトを指定できます。要素が指定されない場合、空の配列が返されます。json_strが有効なJSONでない場合、またはいずれかのパスパラメータが有効なパス式でないか、*ワイルドカードを含む場合、エラーが返されます。 |
<jsonPath> | 挿入先のJSONパス。NULLの場合、NULLを返します。 |
<val> | JSONに挿入する値。NULLの場合、対応する位置にNULL値が挿入されます。 |
戻り値
JSON値を返します。
json_set関数はJSON内のデータを挿入または更新し、その結果を返します。json_strまたはpathがNULLの場合はNULLを返します。それ以外の場合、json_str引数が有効なJSONでないか、いずれかのパス引数が有効なパス式でないか、*ワイルドカードを含む場合はエラーが発生します。
パス値ペアは左から右に評価されます。
json内の既存パスに対するパス値ペアは、既存のjson値を新しい値で上書きします。json内の存在しないパスに対するパス値ペアは、パスが以下のいずれかの値の型を識別する場合にjsonに値を追加します:
-
既存オブジェクト内に存在しないメンバー。メンバーがオブジェクトに追加され、新しい値と関連付けられます。
-
既存配列の末尾を超えた位置。配列が新しい値で拡張されます。既存の値が配列でない場合、配列として自動的にラップされ、その後新しい値で拡張されます。
それ以外の場合、json内の存在しないパスに対するパス値ペアは無視され、効果を持ちません。
例
select json_set(null, null, null);
+------------------------------+
| json_set(NULL, NULL, 'NULL') |
+------------------------------+
| NULL |
+------------------------------+
select json_set('{"k": 1}', "$.k", 2);
+------------------------------------+
| json_set('{\"k\": 1}', '$.k', '2') |
+------------------------------------+
| {"k":2} |
+------------------------------------+
select json_set('{"k": 1}', "$.j", 2);
+------------------------------------+
| json_set('{\"k\": 1}', '$.j', '2') |
+------------------------------------+
| {"k":1,"j":2} |
+------------------------------------+