MySQLでは、JSON_SET()
関数はJSONドキュメントに値を挿入または更新し、結果を返します。
最初の引数としてJSONドキュメントを指定し、その後に挿入するパス、挿入する値を指定します。複数の値を更新する必要がある場合は、複数のパスと値のペアを提供できます。
構文
構文は次のようになります:
JSON_SET(json_doc, path, val[, path, val] ...)
場所:
-
json_doc
JSONドキュメントです。 path
データを挿入したり、値を更新したりする要素のパスです。-
val
は新しい値です。
パスと値のペアは左から右に評価されます。 1つのペアを評価することによって作成されたドキュメントは、次のペアが評価される新しい値になります。
最初の引数が有効なJSONドキュメントでない場合、またはいずれかのパス引数が有効なパス式ではないか、*
が含まれている場合、エラーが発生します または**
ワイルドカード。
例1-値を挿入する
この関数を使用して値を挿入する方法を示す例を次に示します。
SELECT JSON_SET('{"a": 1, "b": 2}', '$.c', 3) AS 'Result';
結果:
+--------------------------+ | Result | +--------------------------+ | {"a": 1, "b": 2, "c": 3} | +--------------------------+
この場合、3番目の引数は指定されたパスで配列に挿入されます。 $.c
を使用しています パスと3
挿入する値。これにより、キーと値のペアが"c": 3
になります。 。
別の例を次に示します。
SELECT JSON_SET('{"Name": "Homer", "Gender": "Male"}', '$.Age', 39) AS 'Result';
結果:
+------------------------------------------------+ | Result | +------------------------------------------------+ | {"Age": 39, "Name": "Homer", "Gender": "Male"} | +------------------------------------------------+
例2–値を更新する
前の例では、値を挿入しました。この例では、既存の値を更新します。
SELECT JSON_SET('{"a": 1, "b": 2}', '$.b', 3) AS 'Result';
結果:
+------------------+ | Result | +------------------+ | {"a": 1, "b": 3} | +------------------+
別の例を次に示します。
SELECT JSON_SET('{"Name": "Homer", "Gender": "Male"}', '$.Name', "Bart") AS 'Result';
結果:
+------------------------------------+ | Result | +------------------------------------+ | {"Name": "Bart", "Gender": "Male"} | +------------------------------------+
例3–アレイ
既存の配列の終わりを超えたパスを使用して、配列に値を挿入できます。例:
SELECT JSON_SET('[1, 2, 3]', '$[3]', 4) AS 'Result';
結果:
+--------------+ | Result | +--------------+ | [1, 2, 3, 4] | +--------------+
ただし、アレイにすでに存在するパスを使用すると、値が更新されます。
SELECT JSON_SET('[1, 2, 3]', '$[1]', 4) AS 'Result';
結果:
+-----------+ | Result | +-----------+ | [1, 4, 3] | +-----------+
既存の値が配列でない場合は、配列として自動ラップされてから、新しい値で拡張されます。例:
SELECT JSON_SET('{"a": 1, "b": 2}', '$[2]', 3) AS 'Result';
結果:
+-----------------------+ | Result | +-----------------------+ | [{"a": 1, "b": 2}, 3] | +-----------------------+
例4–複数の値
一度に複数の値を挿入/更新できます。キーと値の各ペアをコンマで区切って追加するだけです。例:
SELECT JSON_SET('{"a": 1, "b": 2, "c": 3}', '$.a', 9, '$.c', 'Bart') AS 'Result';
結果:
+-------------------------------+ | Result | +-------------------------------+ | {"a": 9, "b": 2, "c": "Bart"} | +-------------------------------+
例5–より大きなJSONドキュメント
これは(少し)大きいJSONドキュメントの例です。
SET @data = '{ "Person": { "Name": "Homer", "Hobbies": ["Eating", "Sleeping"] } }'; SELECT JSON_SET(@data, '$.Person.Name', 'Bart', '$.Person.Hobbies[1]', "Mischief") AS 'Result';
結果:
+-----------------------------------------------------------------+ | Result | +-----------------------------------------------------------------+ | {"Person": {"Name": "Bart", "Hobbies": ["Eating", "Mischief"]}} | +-----------------------------------------------------------------+>
JSON_INSERT()
も参照してください 既存の値を置き換えずに値を挿入する場合、およびJSON_REPLACE()
既存の値のみを置き換えるため。