MySQLでは、JSON_INSERT()
関数はJSONドキュメントに値を挿入し、結果を返します。
最初の引数としてJSONドキュメントを指定し、次に挿入するパス、次に挿入する値を指定します。
構文
構文は次のようになります:
JSON_INSERT(json_doc, path, val[, path, val] ...)
場所:
-
json_doc
JSONドキュメントです。 path
は、新しい値を挿入する要素のパスです。-
val
挿入される新しい値です。
パスと値のペアは左から右に評価されます。 1つのペアを評価することによって作成されたドキュメントは、次のペアが評価される新しい値になります。
例1-基本的な使用法
実例を示します。
SELECT JSON_INSERT('{"a": 1, "b": 2}', '$.c', 3) AS 'Result';
結果:
+--------------------------+ | Result | +--------------------------+ | {"a": 1, "b": 2, "c": 3} | +--------------------------+
したがって、3番目の引数は、指定されたパスで配列に挿入されます。この場合、私は$.c
を使用します パスと3
挿入する値。これにより、キーと値のペアが"c": 3
になります。 。
別の例を次に示します。
SELECT JSON_INSERT('{"Name": "Homer", "Gender": "Male"}', '$.Age', 39) AS 'Result';
結果:
+------------------------------------------------+ | Result | +------------------------------------------------+ | {"Age": 39, "Name": "Homer", "Gender": "Male"} | +------------------------------------------------+
例2–既存のパスを上書きしようとしています
ドキュメント内の既存のパスのパスと値のペアは無視され、既存のドキュメント値を上書きしません。
したがって、前の例を変更してName
に値を挿入するとします (すでに存在します)、挿入は行われません:
SELECT JSON_INSERT('{"Name": "Homer", "Gender": "Male"}', '$.Name', "Bart") AS 'Result';
結果:
+-------------------------------------+ | Result | +-------------------------------------+ | {"Name": "Homer", "Gender": "Male"} | +-------------------------------------+
例3–アレイ
既存の配列の終わりを超えたパスを使用して、配列に値を挿入できます。例:
SELECT JSON_INSERT('[1, 2, 3]', '$[3]', 4) AS 'Result';
結果:
+--------------+ | Result | +--------------+ | [1, 2, 3, 4] | +--------------+
ただし、アレイにすでに存在するパスを使用する場合、アレイは変更されません。
SELECT JSON_INSERT('[1, 2, 3]', '$[1]', 4) AS 'Result';
結果:
+-----------+ | Result | +-----------+ | [1, 2, 3] | +-----------+
既存の値が配列でない場合は、配列として自動ラップされてから、新しい値で拡張されます。例:
SELECT JSON_INSERT('{"a": 1, "b": 2}', '$[2]', 3) AS 'Result';
結果:
+-----------------------+ | Result | +-----------------------+ | [{"a": 1, "b": 2}, 3] | +-----------------------+
ただし、繰り返しになりますが、既存のパスに値を挿入しようとしても、JSONドキュメントは変更されません。
SELECT JSON_INSERT('{"a": 1, "b": 2}', '$[0]', 3) AS 'Result';
結果:
+------------------+ | Result | +------------------+ | {"a": 1, "b": 2} | +------------------+
例4–より大きなJSONドキュメント
これは(少し)大きいJSONドキュメントの例です。
SET @data = '{ "Person": { "Name": "Homer", "Hobbies": ["Eating", "Sleeping"] } }'; SELECT JSON_INSERT(@data, '$.Person.Hobbies[2]', "Base Jumping") AS 'Result';
結果:
+----------------------------------------------------------------------------------+ | Result | +----------------------------------------------------------------------------------+ | {"Person": {"Name": "Homer", "Hobbies": ["Eating", "Sleeping", "Base Jumping"]}} | +----------------------------------------------------------------------------------+
JSON_ARRAY_INSERT()
も参照してください およびJSON_ARRAY_APPEND()
JSON配列にデータを挿入または追加する必要がある場合。