MySQLでは、JSON_REPLACE()
関数はJSONドキュメントの値を置き換え、結果を返します。
最初の引数としてJSONドキュメントを指定し、その後にデータを置き換えるパス、既存の値を置き換える値を指定します。
必要に応じて、ドキュメント内の複数の場所でデータを置き換えることができます。これを行うには、必要に応じて複数のパスと値のペアを指定するだけです。
構文
構文は次のようになります:
JSON_REPLACE(json_doc, path, val[, path, val] ...)
json_doc
の場所 JSONドキュメント、path
はデータを置き換えるパスであり、val
は、既存の値を置き換える新しい値です。
パス/値のペアは左から右に評価されます。 1つのペアを評価することによって作成されたドキュメントは、次のペアが評価される新しい値になります。
パスと値のペアがJSONドキュメントに存在しない場合、それは無視され、効果はありません。
最初の引数は有効なJSONドキュメントである必要があります。そうでない場合、エラーが発生します。
また、path
引数は有効なパス式である必要があり、*
を含めることはできません または**
ワイルドカードを指定しないと、エラーが発生します。
例1-基本的な使用法
実例を示します。
SELECT JSON_REPLACE('{"a": 1, "b": 2, "c": 3}', '$.b', 9) AS 'Result';
結果:
+--------------------------+ | Result | +--------------------------+ | {"a": 1, "b": 9, "c": 3} | +--------------------------+
この場合、b
を置き換えました 9
のの値 。これは、$.b
を指定したためです。 2番目の引数として、9
3番目として。
別の例を次に示します。
SELECT JSON_REPLACE('{"Name": "Bart", "Age": 10}', '$.Name', 'Nelson - Ha Ha!') AS 'Result';
結果:
+----------------------------------------+ | Result | +----------------------------------------+ | {"Age": 10, "Name": "Nelson - Ha Ha!"} | +----------------------------------------+
例2–存在しないパス
存在しないパスを指定すると、何も削除されません。元のJSONドキュメントは変更なしで返されます。
SELECT JSON_REPLACE('{"Name": "Homer", "Age": 39}', '$.Gender', 'Male') AS 'Result';
結果:
+------------------------------+ | Result | +------------------------------+ | {"Age": 39, "Name": "Homer"} | +------------------------------+
例3–アレイ
配列を使用した例を次に示します。
SELECT JSON_REPLACE('[1, 2, 3]', '$[0]', 9) AS 'Result';
結果:
+-----------+ | Result | +-----------+ | [9, 2, 3] | +-----------+
配列はゼロベースの番号付けを使用するため、この場合、最初の要素が置き換えられます。
別の配列の例を次に示します。今回は、ネストされた配列の値を置き換えます。
SELECT JSON_REPLACE('[1, 2, [3, 4, 5]]', '$[2][1]', 9) AS 'Result';
結果:
+-------------------+ | Result | +-------------------+ | [1, 2, [3, 9, 5]] | +-------------------+
例4–複数のパス
JSONドキュメント内の複数の場所でデータを置き換えるために、複数のパスを指定できます。
基本的な例:
SELECT JSON_REPLACE('[1, 2, 3, 4, 5]', '$[1]', 9, '$[3]', 22) AS 'Result';
結果:
+------------------+ | Result | +------------------+ | [1, 9, 3, 22, 5] | +------------------+
例5–より大きなJSONドキュメント
これは(少し)大きいJSONドキュメントの例です。
SET @data = '{ "Person": { "Name": "Homer", "Age": 39, "Hobbies": ["Eating", "Sleeping"] } }'; SELECT JSON_REPLACE(@data, '$.Person.Name', 'Bart', '$.Person.Age', 10, '$.Person.Hobbies[1]', 'Base Jumping') AS 'Result';
結果:
+--------------------------------------------------------------------------------+ | Result | +--------------------------------------------------------------------------------+ | {"Person": {"Age": 10, "Name": "Bart", "Hobbies": ["Eating", "Base Jumping"]}} | +--------------------------------------------------------------------------------+