指定された位置に JSON 値を JSON 配列またはオブジェクトに挿入します。
構文
JSON json_insert(JSON <input>, ARRAY STRING <path>, JSON <value>, BOOLEAN <insert_after>);パラメーター
| パラメーター | 必須 | データ型 | 説明 |
|---|---|---|---|
input | はい | JSON 配列または JSON オブジェクト | 値を挿入する対象の JSON ドキュメントです。 |
path | はい | ARRAY STRING | 値を挿入する位置です。 |
value | はい | JSON | 挿入する JSON 値です。 |
insert_after | はい | ブール値 | input が配列を含み、かつ path で指定された要素が存在する場合の挿入方向を制御します。true の場合はその位置の後に挿入し、false の場合はその位置の前に挿入します。デフォルト値は false です。 |
戻り値
変更後の JSON ドキュメントを返します。
注意事項
配列への挿入ルール: 配列に挿入する場合、配列の長さを n、path で指定されたターゲットインデックスを m とします。
| 条件 | 動作 |
|---|---|
m >= n | 配列の末尾に追加されます。 |
m < -n | 配列の先頭に追加されます。 |
-n <= m < n | insert_after の値に応じて、位置 m |
input に配列が含まれない場合 | デフォルトで末尾に挿入されます。 |
使用例
JSON オブジェクトへの挿入
ネストされたオブジェクト f2 内にキー t3 を追加します。
SELECT json_insert(
JSON'{"f1":1,"f2":{"t1":1,"t2":2}}',
array("f2","t3"),
JSON'3',
false
);結果:{"f1":1,"f2":{"t1":1,"t2":2,"t3":3}}
JSON 配列への挿入
以下のすべての例では、入力として {"f1":[0,1,2]} を使用します。この配列の長さは 3 であるため、n = 3 です。
特定のインデックスの前または後に挿入(-n <= m < n):
-- インデックス 0 の前に 10 を挿入 (insert_after = false)
SELECT json_insert(JSON'{"f1":[0,1,2]}', array("f1","0"), JSON'10', false);
-- 結果: {"f1":[10,0,1,2]}
-- インデックス 0 の後に 10 を挿入 (insert_after = true)
SELECT json_insert(JSON'{"f1":[0,1,2]}', array("f1","0"), JSON'10', true);
-- 結果: {"f1":[0,10,1,2]}
-- インデックス 1 の前に 10 を挿入 (insert_after = false)
SELECT json_insert(JSON'{"f1":[0,1,2]}', array("f1","1"), JSON'10', false);
-- 結果: {"f1":[0,10,1,2]}末尾に追加(m >= n、インデックス 4 >= 長さ 3):
SELECT json_insert(JSON'{"f1":[0,1,2]}', array("f1","4"), JSON'4', false);
-- 結果: {"f1":[0,1,2,4]}先頭に追加(m < -n、インデックス -4 < -3):
SELECT json_insert(JSON'{"f1":[0,1,2]}', array("f1","-4"), JSON'4', false);
-- 結果: {"f1":[4,0,1,2]}