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