MariaDBのSQL Statements & StructureにおけるJSON_ARRAY_APPENDプログラミング


MariaDB の JSON_ARRAY_APPEND 関数は、JSON ドキュメント内の指定された配列に値を追加するために使用されます。この関数は、JSON データを操作する際に役立ちます。

構文

JSON_ARRAY_APPEND(json_doc, path, value [, path, value] ...)

引数

  • pathvalue のペアは複数指定できます。
  • 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 関数以外にもいくつか方法があります。状況に応じて適切な方法を選択することが重要です。

代替方法

  1. JSON_INSERT` 関数

    JSON_INSERT 関数は、JSON ドキュメント内の任意の位置に新しい値を挿入するために使用できます。配列の末尾に値を追加する場合は、JSON_ARRAY_APPEND 関数と同様に使用できます。

    JSON_INSERT('{"items": ["item1", "item2"]}', '$.items', -1, 'item3')
    

    この結果は、JSON_ARRAY_APPEND 関数を使用した例と同じになります。

  2. 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 関数と同じ結果を生成します。

  3. 手動で JSON ドキュメントを更新する

    最も単純な方法は、JSON ドキュメントを文字列として操作し、手動で更新することです。ただし、この方法はエラーが発生しやすいため、あまり推奨されません。

    SET updated_doc = JSON_REPLACE('{"items": ["item1", "item2"]}', '$.items', '["item1", "item2", "item3"]');
    
方法利点欠点
JSON_ARRAY_APPENDシンプルでわかりやすい特定の状況でのみ使用可能
JSON_INSERTより汎用性が高い構文が少し複雑
JSON_QUERY + JSON_MERGE柔軟性が高い複数のクエリが必要
手動更新シンプルエラーが発生しやすい