MariaDBでは、JSON_REPLACE()
JSONドキュメントの既存の値を置き換えて結果を返す組み込み関数です。
構文
構文は次のようになります:
JSON_REPLACE(json_doc, path, val[, path, val] ...)
例
実例を示します。
SET @json = '{ "name" : "Wag", "type" : "Cat" }';
SELECT JSON_REPLACE(@json, '$.type', 'Dog');
結果:
+--------------------------------------+ | JSON_REPLACE(@json, '$.type', 'Dog') | +--------------------------------------+ | {"name": "Wag", "type": "Dog"} | +--------------------------------------+
この場合、値Cat
を置き換えました Dog
を使用 。
配列要素
配列要素を置き換えるには、要素のインデックスを指定します:
SET @json = '{ "name" : "Wag", "scores" : [8, 0, 9] }';
SELECT JSON_REPLACE(@json, '$.scores[1]', 7);
結果:
+---------------------------------------+ | JSON_REPLACE(@json, '$.scores[1]', 7) | +---------------------------------------+ | {"name": "Wag", "scores": [8, 7, 9]} | +---------------------------------------+
この場合、2番目の配列要素は新しい値に置き換えられました。配列はゼロベースであるため、$.scores[1]
配列の2番目の要素を参照します。
複数のパス
この構文では、複数のパスの値をJSON_REPLACE()
への1回の呼び出しで置き換えることができます。 。
複数のパスを提供する場合、それらは左から右に評価されます。これは、前の評価の結果が次の値として使用されることを意味します。
まず、キーに基づいてドキュメント内の複数の値を置き換える例を次に示します。
SET @json = '
{
"name" : "Flutter",
"type" : "Bird",
"weight" : 10
}
';
SELECT JSON_REPLACE(@json, '$.type', 'Bat', '$.weight', 20);
結果:
+------------------------------------------------------+ | JSON_REPLACE(@json, '$.type', 'Bat', '$.weight', 20) | +------------------------------------------------------+ | {"name": "Flutter", "type": "Bat", "weight": 20} | +------------------------------------------------------+
各値は期待どおりに置き換えられました。
次の例では、配列内の複数の要素を置き換えます。
SET @json = '{ "scores" : [ 0, 1, 2, 3, 4, 5 ] }';
SELECT
JSON_REPLACE(
@json,
'$.scores[2]', "a",
'$.scores[4]', "b"
) AS Result;
結果:
+------------------------------------+ | Result | +------------------------------------+ | {"scores": [0, 1, "a", 3, "b", 5]} | +------------------------------------+
ヌル引数
json_doc
の場合 またはpath
のいずれか 引数はnull
です 、結果はNULL
です 。ただし、value
引数はnull
です 、次に値がnull
に置き換えられます 。
SELECT
JSON_REPLACE(null, '$.a', 1) AS a,
JSON_REPLACE('{"a":1}', null, 1) AS b,
JSON_REPLACE('{"a":1}', '$.a', null) AS c;
結果:
+------+------+-------------+ | a | b | c | +------+------+-------------+ | NULL | NULL | {"a": null} | +------+------+-------------+
次の例では、JSON_REPLACE()
への各呼び出しからパス引数の1つが欠落しています。 。これにより、NULL
になります 両方の呼び出しで返されます:
SET @json = '{ "name" : "Wag", "type" : "Cat" }';
SELECT
JSON_REPLACE(@json, null, 'Bark', '$.type', 'Dog') AS a,
JSON_REPLACE(@json, '$.name', 'Bark', null, 'Dog') AS b;
結果:
+------+------+ | a | b | +------+------+ | NULL | NULL | +------+------+
パラメータカウントが正しくありません
JSON_REPLACE()
を呼び出す 引数がないとエラーになります:
SELECT JSON_REPLACE();
結果:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'JSON_REPLACE'
十分な引数が渡されない場合も同じです:
SELECT JSON_REPLACE('{"a":1}');
結果:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'JSON_REPLACE'
同様の機能
JSON_INSERT()
関数は新しいデータを挿入できます。
JSON_SET()
関数は、新しいデータを挿入し、既存のデータを更新できます。したがって、JSON_SET()
JSON_INSERT()
のようなものです およびJSON_REPLACE()
1つの機能で。