MariaDBのSQL Statements & StructureにおけるJSON_ARRAY_APPENDプログラミング
MariaDB の JSON_ARRAY_APPEND
関数は、JSON ドキュメント内の指定された配列に値を追加するために使用されます。この関数は、JSON データを操作する際に役立ちます。
構文
JSON_ARRAY_APPEND(json_doc, path, value [, path, value] ...)
引数
path
とvalue
のペアは複数指定できます。value
: 追加する値path
: 値を追加する配列への JSONPath 式json_doc
: JSON ドキュメント
戻り値
- いずれかの引数が NULL の場合、または JSON ドキュメントが無効な場合、またはパスが無効な場合、またはワイルドカード
*
または**
が含まれている場合、NULL を返します。 - 処理が成功した場合、変更された JSON ドキュメントを返します。
例
以下の例では、items
という名前の配列に新しい値 "item3" を追加します。
SELECT JSON_ARRAY_APPEND('{"items": ["item1", "item2"]}', '$.items', 'item3');
結果
{"items": ["item1", "item2", "item3"]}
json_doc
が有効な JSON ドキュメントではない場合、またはいずれかのパスが無効な場合、またはワイルドカード*
または**
が含まれている場合、エラーが返されます。- 評価は左から右に行われ、前のペアの結果が次のペアに対する新しい値となります。
- 注文に新しいアイテムを追加する
- ユーザーのプロフィールに新しい情報を追加する
- 商品リストに新しい商品を追加する
UPDATE products
SET data = JSON_ARRAY_APPEND(data, '$.items', '{"id": 3, "name": "Book", "price": 10.99}')
WHERE id = 1;
例 2: ユーザーのプロフィールに新しい情報を追加する
この例では、users
という名前の JSON ドキュメントに、ユーザーの "John Doe" のプロフィールに新しい電子メールアドレス "[email protected]" を追加します。
UPDATE users
SET data = JSON_ARRAY_APPEND(data, '$.users[0].emails', '"[email protected]"')
WHERE username = 'johndoe';
例 3: 注文に新しいアイテムを追加する
この例では、orders
という名前の JSON ドキュメントに、注文 ID 1 に新しいアイテム "T-Shirt" を追加します。
UPDATE orders
SET data = JSON_ARRAY_APPEND(data, '$.orders[0].items', '{"product_id": 42, "quantity": 1}')
WHERE id = 1;
- JSON ドキュメントを直接操作する代わりに、JSON データを操作するためのライブラリを使用することもできます。
- これらの例では、
UPDATE
ステートメントを使用して JSON ドキュメントを更新しています。ただし、JSON_ARRAY_APPEND
関数は、SELECT
ステートメントや他のステートメントでも使用できます。
MariaDB で JSON 配列に値を追加するには、JSON_ARRAY_APPEND
関数以外にもいくつか方法があります。状況に応じて適切な方法を選択することが重要です。
代替方法
JSON_INSERT` 関数
JSON_INSERT
関数は、JSON ドキュメント内の任意の位置に新しい値を挿入するために使用できます。配列の末尾に値を追加する場合は、JSON_ARRAY_APPEND
関数と同様に使用できます。JSON_INSERT('{"items": ["item1", "item2"]}', '$.items', -1, 'item3')
この結果は、
JSON_ARRAY_APPEND
関数を使用した例と同じになります。JSON_QUERY関数とJSON_MERGE` 関数
JSON_QUERY
関数は、JSON ドキュメントから部分ドキュメントを抽出するために使用できます。JSON_MERGE
関数は、2 つの JSON ドキュメントをマージするために使用できます。これらの関数を組み合わせて、配列に新しい値を追加することができます。DECLARE new_items JSON_ARRAY('item3'); SET updated_doc = JSON_MERGE('{"items": ["item1", "item2"]}', JSON_QUERY('$.items', '$ + new_items'));
このコードは、
JSON_ARRAY_APPEND
関数と同じ結果を生成します。手動で JSON ドキュメントを更新する
最も単純な方法は、JSON ドキュメントを文字列として操作し、手動で更新することです。ただし、この方法はエラーが発生しやすいため、あまり推奨されません。
SET updated_doc = JSON_REPLACE('{"items": ["item1", "item2"]}', '$.items', '["item1", "item2", "item3"]');
方法 | 利点 | 欠点 |
---|---|---|
JSON_ARRAY_APPEND | シンプルでわかりやすい | 特定の状況でのみ使用可能 |
JSON_INSERT | より汎用性が高い | 構文が少し複雑 |
JSON_QUERY + JSON_MERGE | 柔軟性が高い | 複数のクエリが必要 |
手動更新 | シンプル | エラーが発生しやすい |