MariaDBでは、JSON_SET() は、データを更新またはJSONドキュメントに挿入し、結果を返す組み込み関数です。
JSON_SET() JSON_INSERT()に対して、データを更新および挿入できます データとJSON_REPLACE()のみを挿入できます データのみを更新できます。
構文
構文は次のようになります:
JSON_SET(json_doc, path, val[, path, val] ...) 場所:
-
json_docJSONドキュメントです。 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'